JavaSE File類的使用
-
Java.io.File類:文件和目錄路徑名的抽象表示形式,與平臺無關
-
File能新建、刪除、重命名文件和目錄,但是不能訪問文件內容本身。(需要使用輸入/輸出流)
-
File對象可以作爲參數傳遞給流的構造函數
-
File類的構造方法:
public File(String pathname)
public File(String parent, String child)
File類代表與平臺無關的文件和目錄。
1 常用方法
-
訪問文件名:
函數名稱 函數功能 getname() 獲取文件名稱 getPath() 獲取文件路徑 getAbsolutePath() 獲取絕對路徑,會相對補齊 getAbsoluteFile() 返回一個用當前文件的絕對路徑構建的file對象 getParent() 獲取文件/文件夾的父類路徑 renameTo(File) 使用file對象給文件/文件夾重命名 案例展示:
package com.io; //訪問文件名案例 import java.io.File; import java.util.zip.GZIPOutputStream; public class Test1 { public static void main(String[] args) { File f = new File("/Users/demut/Documents/File/tt.txt");//此時f爲tt.txt文件 File fp = new File("/Users/demut/Documents/File");//此fp爲目錄 // File f1 = new File("/Users/demut/","/Documents/File/tt.txt");//使用相對較少 // File f2 = new File("/Users"+File.separator+"/demut/Documents/File/tt.txt");//也可以 System.out.println(f.getName());//獲取文件名稱 System.out.println(fp.getName());//獲取文件夾名稱 File f3 = new File("src/com/io/Test1.java");//此時使用相對路徑創建file對象 System.out.println(f.getPath());//獲取文件路徑 System.out.println(f3.getAbsolutePath());//獲取絕對路徑,會自動補齊 System.out.println(f3.getAbsoluteFile()); //返回一個用當前文件的絕對路徑構建的file對象 System.out.println(f3.getParent());//返回當前文件或文件夾的父級路徑 f.renameTo(new File("/Users/demut/Documents/File/ttt.txt"));//給文件或文件夾重命名 } } /*運行結果: tt.txt File /Users/demut/Documents/File/tt.txt /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java /Users/demut/JAVASE Project/JavaSE/src/com/io/Test1.java src/com/io */
-
文件檢測:
函數名稱 函數功能 exists() 判斷文件/文件夾是否存在 canWrite() 判斷文件是否可寫 canRead() 判斷文件是否可讀 isFile() 判斷file對象是否爲文件 isDirectory() 判斷file對象是否爲路徑 lastModified() 獲取文件最後修改時間,返回一個毫秒數 length() 獲取文件長度–>字節數 案例展示:
package com.io; import java.io.File; //文件檢測 public class Test2 { public static void main(String[] args) { File file = new File("/Users/demut/Documents/File/ttt.txt"); System.out.println(file.exists()); //判斷文件或文件夾是否存在 System.out.println(file.canWrite()); //判斷文件是否可寫 System.out.println(file.canRead()); //判斷文件是否可讀 System.out.println(file.isFile()); //判斷file是否爲文件 System.out.println(file.isDirectory()); //判斷file是否爲路徑 System.out.println(file.lastModified());//獲取文件的最後修改時間,返回的是一個毫秒數 System.out.println(file.length()); //獲取文件長度-->字節數 } } /*運行結果: true true true true false 1583560929000 0 */
-
文件操作和目錄操作:
函數名稱 函數功能 createNewFile() 創建文件(需要捕獲異常) mkdir() 創建單層目錄 mkdirs() 創建多層目錄 delete() 刪除文件/文件夾 list() 返回當前文件夾的子集名稱,包括目錄和文件(String類型) listFiles() 返回當前文件夾的子集的file對象,包括目錄和文件(File類型) 案例展示:
package com.io; import java.io.File; import java.io.IOException; //文件操作和目錄操作 public class Test3 { public static void main(String[] args) { File file = new File("/Users/demut/Documents/File/tt2.txt"); if (!file.exists()){ try { file.createNewFile(); // 創建文件 } catch (IOException e) { e.printStackTrace(); } } //file.delete(); //刪除文件 File file1 = new File("/Users/demut/Documents/File/aaa/bbb/ccc"); //file1.mkdir(); //創建單層目錄 file1.mkdirs(); //創建多層目錄 File file2 = new File("/Users/demut/Documents/File"); String[] fl = file2.list(); //返回當前文件夾的子集的名稱,包括目錄和文件 for (String s : fl){ System.out.println(s); } File[] fs = file2.listFiles(); //返回當前文件夾的子集的file對象,包括目錄和文件 for (File ff : fs) { System.out.println(ff); } } } /*運行結果: tt2.txt .DS_Store ttt.txt aaa /Users/demut/Documents/File/tt2.txt /Users/demut/Documents/File/.DS_Store /Users/demut/Documents/File/ttt.txt /Users/demut/Documents/File/aaa */
2 遞歸遍歷文件需求
現在需要遍歷Targetu文件夾,返回該文件夾下的所有目錄和文件,不論層次。
- 使用非遞歸,代碼量冗雜,且重複很多。
- 使用遞歸,很簡潔。
代碼展示:
package com.io;
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
File file = new File("/Users/demut/Desktop/Targetu");
new Demo01().test(file);
}
//遞歸遍歷文件
public void test(File file){
if (file.isFile()){
System.out.println(file.getAbsolutePath()+"是文件");
}else {
System.out.println(file.getAbsolutePath()+"是文件夾");
//若爲文件夾,則文件夾內可能有子文件夾或文件
File[] fs = file.listFiles();//獲取當前文件夾下的子文件夾或者文件的file對象
if (fs != null && fs.length > 0){
for(File ff : fs){
test(ff); //此處使用遞歸代替了以下代碼
// if (ff.isFile()){
// System.out.println(file.getAbsolutePath()+"是文件");
// }else {
// System.out.println(file.getAbsolutePath()+"是文件夾");
// File[] fs1 = ff.listFiles();
// if (fs1 != null && fs1.length > 0){
// for (File ff1 : fs1){
// //...... //始終在重複
// }
// }
// }
}
}
}
}
}
//運行結果可自行調試
寫在最後
驕傲在敗壞以先,狂心在跌倒之前!
To Demut!