java學習之IO流3

File類:

1、構造函數和字段

下圖中是File類中的構造函數,separator是File類中的靜態字段,表示名稱分隔符,在windows中是‘\’。pathSeparator是File類中的靜態字段,表示路徑分隔符,在windows中是“;”(分號)。

	public static void constructorDemo()
	{
		File f1 = new File("c:\\a.txt");
		File f2 = new File("c:\\", "a.txt");
		File f = new File("c:\\");
		File f3 = new File(f, "a.txt");
		File f4 = new File("c:" + File.separatorChar + "a.txt");
		System.out.println(f4);//c:\a.txt
	}


2、常見方法
(1)獲取
     1.1 獲取文件名稱。
     1.2 獲取文件路徑。
     1.3 獲取文件大小。
     1.4 獲取文件修改時間。
下圖中第4行獲取文件的名稱,第5行獲取文件的絕對路徑,第6行獲取文件的相對路徑,第7行獲取文件的大小,第8行獲取文件最後一次修改時間,返回毫秒值。

	public static void getDemo()
	{
		File file = new File("demo.txt");
		String name = file.getName();
		String absPath = file.getAbsolutePath();
		String path = file.getPath();
		long len = file.length();
		long time = file.lastModified();
		System.out.println(name);//demo.txt
		System.out.println(absPath);//E:\java workspace\OtherAPI\demo.txt
		System.out.println(path);//demo.txt
		System.out.println(len);//4
		System.out.println(time);//1434104737956
	}

(2)創建和刪除

下圖中第3行建立文件流對象,並關聯文件。第4行使用createNewFile()方法創建一個新文件,返回值是boolean類型,表示如果創建成功就返回true,如果創建失敗就返回false。文件和文件夾的創建和輸出流不一樣,如果文件或文件夾不存在則創建,如果存在則不創建。第6行使用delete()方法刪除文件,刪除成功返回true,刪除失敗返回false。如果要刪除的文件正在被流操作,那也不能刪除成功,返回false。第9行使用mkdir()方法創建一個文件夾"abc",注意,這個方法只能創建單個文件夾,不能創建多級目錄的文件夾,創建成功返回true,失敗返回false。第10行使用delete()方法刪除文件夾,如果文件夾中有文件,就不能刪除,而且刪除的文件夾不會放在回收站中。要創建多級目錄的文件夾要使用mkdirs()方法,如第12行,第13行刪除文件夾實際上刪除的是文件夾e,因爲第11行構造函數中實際關聯的是文件夾e,之前的都是目錄。

	public static void createAndDeleteDemo() throws IOException
	{
		File file = new File("file.txt");
//		boolean b = file.createNewFile();
//		System.out.println("b = " + b);
//		boolean b = file.delete();
//		System.out.println("b = " + b);
//		File dir = new File("abc");
//		System.out.println(dir.mkdir());//只創建單個文件夾,不能創建多級目錄的文件夾
//		System.out.println(dir.delete());//如果文件夾中有文件,就不能刪除。刪除的文件夾不會在回收站中
		File dirs = new File("a\\b\\c\\d\\e");
		System.out.println(dirs.mkdirs());//true
		System.out.println(dirs.delete());//true
	}

(3)判斷

下圖中第4行用exists()方法判斷文件是否存在,第5行用isFile()判斷是否爲文件。如果文件不存在時,返回的也是false。第6行用isDirectory()方法判斷是否爲目錄。

	public static void isDemo()
	{
		File file1 = new File("demo.txt");
		System.out.println(file1.exists());//true
		System.out.println(file1.isFile());//true
		System.out.println(file1.isDirectory());//false
	}

(4)重命名

下圖中調用renameTo()方法,將文件0.txt重命名爲1.txt,也可以把指定命名後的文件的所在路徑,比如d:\\1.txt,這樣重命名後,原來e:\\0.txt 就會消失,而出現在d盤下1.txt。

	public static void renameToDemo()
	{
		File f1 = new File("e:\\0.txt");
		File f2 = new File("e:\\1.txt");
		f1.renameTo(f2);
	}
(5)系統根目錄和容量

下圖中第3行調用File的靜態方法listRoots(),返回系統更目錄,放在一個File對象數組中,輸出時會看到所有系統的根目錄。第14行中,調用的方法獲得指定目錄的空閒空間,第15行獲取的是總空間。

	public static void listRootsDemo() 
	{
		File[] files = File.listRoots();
		for(File file : files)
		{
			System.out.println(file);
		}
		/*輸出
		 * 	C:\
			D:\
			E:\
			F:\
			G:\*/
		File f = new File("d:\\");
		System.out.println("空閒空間:" + f.getFreeSpace());//
		System.out.println("總空間:" + f.getTotalSpace());//
	}
(6)獲取目錄內容

下圖中第4行用list()方法,獲取當前目錄下的文件以及文件夾的名稱,包括隱藏文件。注意:調用list方法的File對象中封裝的必須是目錄,否則會發生NullPointerException,因爲String數組根本就沒有創建成功。如果訪問系統級目錄,也會發生空指針異常。如果目錄存在,但是沒有內容,會返回一個數組,但是長度爲0。

	public static void listDemo()
	{
		File file = new File("d:\\");
		String[] names = file.list();
		for(String name : names)
		{
			System.out.println(name);
		}
	}

(7)過濾器

如果使用list()方法只要獲取指定的文件,就要使用過濾器。如下圖11-18行,定義一個類FilterByJava,實現了過濾器接口FilenameFilter,這個接口中只有一個方法就是accept,我們必須重寫改方法。參數中dir是文件的路徑,name是文件名。只有滿足條件的文件才返回true,否則返回false。第4行就使用list的重載函數,傳遞過濾器對象作爲市場,返回指定條件的文件名稱。其實過濾器的實現就是先調用list,把該目錄下的所有文件名都放在一個容器中,然後在逐個判斷是否滿足條件,最後把滿足條件的文件名返回。

	public static void listDemo1()
	{
		File file = new File("e:\\");
		String[] names = file.list(new FilterByJava());
		for(String name : names)
		{
			System.out.println(name);
		}
	}

	public class FilterByJava implements FilenameFilter 
	{
		public boolean accept(File dir, String name)
		{
	
			return name.endsWith(".java");
		}
	}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章