1. 程式人生 > >Java常用API(六)——File

Java常用API(六)——File

   java.io.File類,File用於表示檔案系統中的一個檔案或目錄。使用File可以:

1.訪問所表示的檔案或目錄的屬性資訊(名字,大小等)

2.建立,刪除檔案或目錄

3.訪問目錄子項

    但是不能訪問資料建立File時要指定路徑,使其表示該路徑下的檔案或目錄,這裡目錄通常指相對路徑,雖然不能準確描述位置。但是根據執行環境而定,可以實現跨平臺"./"指當前目錄,在eclipse下執行java程式時當前目錄的位置就是所在專案的目錄。

public class FileDemo {
	public static void main(String[] args) {
		File file=new File("./demo.txt");
		System.out.println(file.getName());
		System.out.println(file.length());
		/**可讀*/
		System.out.println(file.canRead());
		/**可寫*/
		System.out.println(file.canWrite());
		/**是否隱藏*/
		System.out.println(file.isHidden());
	}
}

     使用File建立一個新檔案:

public class CreateNewFileDemo {
	public static void main(String[] args) throws IOException {
		/**
		 * 在當前目錄下新建一個檔案test.txt
		 */
		File file=new File("./test.txt");//抽象路徑
		//判斷file檔案表示的檔案或目錄是否真實存在
		if (!file.exists()) {
			//將file表示的檔案創建出來
			file.createNewFile();//丟擲異常
			System.out.println("successfully created");
		}else {
			System.out.println("already exist");
		}
	}
}

    刪除一個檔案:

public class DeleteFileDemo {

	public static void main(String[] args) {
		/**
		 * 刪除當前目錄下的test.txt
		 * ./是預設的
		 */
		File file=new File("test.txt");
		file.delete();
		if (!file.exists()) {
			System.out.println("successfully deleted");
		}
	}
}

    建立一個目錄:

public class MkDirDemo {
	public static void main(String[] args) {
		/**
		 * 在當前目錄下新建一個目錄:demo
		 */
		File dir=new File("demo");
		if (!dir.exists()) {
			dir.mkdir();
			System.out.println("已建立");
		}else {
			System.out.println("已存在");
		}
	}
}

     建立一個多級目錄:

public class MkDirsDemo {
	public static void main(String[] args) {
		/**
		 * 在當前目錄下新建./a/b/c/d/e/f
		 */
		File dir=new File("a/b/c/d/e/f");
		if (!dir.exists()) {
			/**
			 * mkdirs將所有不存在的父目錄一同創建出來
			 */
			dir.mkdirs();
			System.out.println("已建立");
		}else {
			System.out.println("已存在");
		}
	}
}

    刪除目錄:

public class DeleteDirDemo {
	public static void main(String[] args) {
		File dir=new File("demo");
		if (dir.exists()) {
			//刪目錄的前提是必須是一個空目錄
			dir.delete();
			System.out.println("已刪除");
		}else {
			System.out.println("沒有該目錄");
		}
	}
}

    獲取一個目錄的所有子項。

public class ListFilesDemo {
	public static void main(String[] args) {
		/**
		 * 獲取當前目錄的所有子項
		 */
		File dir=new File(".");
		/**
		 * boolean isDirectory()
		 * 判斷file表示的是一個目錄
		 * boolean isFile()
		 * 判斷是否是一個檔案
		 */
		if (dir.isDirectory()) {
			File[]files=dir.listFiles();
			System.out.println(files.length);
			for (int i = 0; i < files.length; i++) {
				System.out.println(files[i].getName());
			}
		}
	}
}

    完成方法,刪除指定的File表示的檔案或目錄。

public class Test {
	public static void main(String[] args) {
		File dir=new File("a");
		delete(dir);
	}
	public static void delete(File file) {
		/** 首先判斷file是否是一個目錄,要是目錄則需要先將該目錄的子項全部刪除後才可以刪除
目錄,若是檔案則可以直接刪除*/
		if (file.isDirectory()) {
			File[]files1=file.listFiles();
			for (int i = 0; i < files1.length; i++) {
/**遞迴呼叫*/
				delete(files1[i]);
			}
			file.delete();
		}	  
	}
}

    listFiles有一個過載方法,允許我們傳入一個引數,該引數為一個檔案過濾器,那麼該方法會將目錄中滿足過濾器要求的子項返回。

public class ListFilesDemo2 {
	public static void main(String[] args) {
		File dir=new File(".");
		/**
		 * 獲取當前目錄中名字以"."開頭的子項
		 */
		//lamda表示式
		File[]dirs=dir.listFiles(new FileFilter() {	
			public boolean accept(File pathname) {
				String name=pathname.getName();
				return name.startsWith(".");
			}
		});
		/**
		 * 該listFiles方法會將目錄中的每個子項都通過
		 * 呼叫給定的過濾器的accept方法進行判斷,將返
		 * 回true的子項保留並以陣列形式返回
		 */
		System.out.println(dirs.length);
	}
}