Java常用API(六)——File
阿新 • • 發佈:2018-12-02
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);
}
}