File類
java.io.File
類是檔案和目錄路徑名的抽象表示,主要用于檔案和目錄的創建、查找和洗掉等操作,File類將檔案,檔案夾和路徑封裝成了物件,提供大量的方法來操作這些物件,
靜態常量
// 靜態常量
static String pathSeparator // 與系統有關的路徑分隔符
// Window作業系統,分隔符是分號;
// Linux作業系統,分隔符是冒號:
static String separator // 與系統有關的名稱分隔符
// Window作業系統,名稱分割符號為 \
// Linux作業系統,名稱分隔符號為 /
絕對路徑和相對路徑
- 絕對路徑:從盤符(Windows)或"/"(Linux)開始的路徑,這是一個完整的路徑,絕對路徑具有唯一性
- 相對路徑:相對于某個目錄的路徑,這是一個便捷的路徑,開發中經常使用,java中寫的相對路徑, 一般都是相對于當前專案
// Windows絕對路徑 Windows
String path1 = "E:\\study\\java\\5_projects\\FileClass\\test";
String path2 = "/opt/html/dist"
// 相對路徑
String path3 = "FileClass\\test";
構造方法
public File(String pathname)
// 通過將給定的路徑名字串轉換為抽象路徑名來創建新的 File實體
public File(String parent, String child)
// 從父路徑名字串和子路徑名字串創建新的 File實體
public File(File parent, String child)
// 從父抽象路徑名和子路徑名字串創建新的 File實體
// 根據給定的路徑 創建File物件
File file1 = new File("E:\\study\\java\\5_projects\\FileClass\\test");
System.out.println(file1.toString() + "\t " + file1.getPath());
// 傳入字串的父路徑 和 字串的子路徑 創建File物件
File file2 = new File("E:\\study\\java\\5_projects\\FileClass","test");
System.out.println(file2);
File file3 = new File("E:\\study\\java\\5_projects","\\FileClass\\test");
System.out.println(file3);
// 傳入File型別的父路徑 和 字串型別的子路徑
File file4 = new File(file1, "1.txt");
System.out.println(file4);
注意:
- 一個File物件代表硬碟中實際存在的一個檔案或者目錄,
- 無論該路徑下是否存在檔案或者目錄,都不影響File物件的創建,
獲取某些屬性
public File getAbsoluteFile() // 獲取絕對路徑(File型別)
public String getAbsolutePath() // 獲取絕對路徑(字串型別)
public String getPath() // 回傳字串型別的路徑
public String getName() // 獲取檔案名
public long length() // 獲取檔案位元組數, 不存在回傳0
public File getParentFile() //回傳File型別的父路徑
public long lastModified() // 回傳最后修改時間
// 獲取絕對路徑(字串型別)
System.out.println("絕對路徑為: " + new File("FileClas\\src").getAbsoluteFile());
System.out.println(file4.getAbsolutePath());
// 獲取絕對路徑(File型別)
System.out.println(file4.getAbsoluteFile());
// 獲取相對路徑下的File物件
File file6 = new File("FileClass" + File.separator + "test" + File.separator + "2.txt");
System.out.println(file6.getAbsolutePath());
// 獲取字串型別的路徑 直接打引結果相同
// 直接列印(toString)呼叫了getPath方法
System.out.println(file1.getPath());
// 獲取檔案名
System.out.println(new File("FileClass/test/1.txt").getName());
// 獲取檔案位元組數, 不存在回傳0
long fileLength = new File("FileClass/test/1.txt").length();
System.out.println(fileLength);
// 獲取父路徑, 回傳File物件
File parentFile = new File("FileClass/test/1.txt").getParentFile();
System.out.println(parentFile);
System.out.println(parentFile.getParentFile());
// 獲取最后修改時間
long lastModifyTime = new File("FileClass/test/1.txt").lastModified();
System.out.println(lastModifyTime + "\t" + new Date(lastModifyTime));
判斷的方法
public boolean exists()
// 判斷路徑是否存在, 存在回傳true
public boolean isFile()
// 判斷是否為檔案 檔案回傳true, 目錄回傳false, 路徑不存在也回傳false
public boolean isDirectory()
// 判斷是否為目錄, 目錄回傳true, 檔案回傳false, 路徑不存在也回傳false
// 判斷路徑是否存在, 存在回傳true
System.out.println(new File("FileClass/test/NewDir1").exists());
// 判斷是否為檔案 檔案回傳true, 目錄回傳false, 路徑不存在也回傳false
System.out.println(file6.isFile());
// 判斷是否為目錄, 目錄回傳true, 檔案回傳false, 路徑不存在也回傳false
System.out.println(new File("FileClass/test/NewDir1").isDirectory());
// 因此 判斷某檔案是檔案/檔案夾時 要先判斷路徑是否存在
if (file1.exists()) {
if(file1.isFile()) {
System.out.println("檔案");
} else {
System.out.println("目錄");
}
} else {
System.out.println("檔案不存在");
}
創建和洗掉檔案
public boolean createNewFile() throws IOException
// 創建檔案, 成功回傳true, 存在則不創建
public boolean mkdir()
// 創建單級目錄, 成功回傳true, 存在則不創建
public boolean mkdirs()
// 創建單/多級目錄, 成功回傳true, 存在則不創建
public boolean delete()
// 洗掉檔案或空目錄, 成功回傳true
// 創建檔案, 成功回傳true, 失敗回傳false
System.out.println(file6.createNewFile());
// 創建目錄, 成功回傳true, 失敗回傳false
System.out.println(new File("FileClass/test/NewDir1").mkdir());
System.out.println(new File("FileClass/test/NewDir2/NewDir3/NewDir4").mkdirs());
// 洗掉檔案 和 空目錄
System.out.println(file6.delete());
System.out.println(new File("FileClass/test/NewDir1").delete());
// 創建目錄
//StringBuilder sb = new StringBuilder("FileClass/test/");
//for (int i = 0; i < 200; i++) {
// sb.append(i);
// sb.append("/");
//}
//System.out.println(new File(sb.toString()).mkdirs());
//
//洗掉目錄
//File fileForDel = new File(sb.toString());
//do {
// try {
// if (Integer.parseInt(fileForDel.getName()) < 0) {
// System.out.println("洗掉失敗");
// return;
// }
// } catch (NumberFormatException e) {
// return;
// }
// fileForDel.delete();
// fileForDel = fileForDel.getParentFile();
//} while (true);
遍歷目錄
public String[] list()
// 回傳目錄下所有檔案 存放在字串陣列中
public File[] listFiles()
// 回傳目錄下所有檔案 存放在File陣列中
String[] arr = new File("FileClass/test").list();
for (String s : arr) {
System.out.println(s);
}
File[] fileArr = new File("FileClass/test").listFiles();
for (File file : fileArr) {
System.out.println(file + "\t" + file.getName());
}
FileFilter介面
檔案過濾器介面,此介面的實作類可以傳遞給方法listFiles(),實作檔案的過濾功能
public boolean accept(File path)
:方法引數就是listFiles()方法獲取到的檔案或者目錄的路徑,如果方法回傳true,表示需要此路徑,否則此路徑將被忽略,
File dir = new File(".\\ConcurrentProgramming\\src\\_5_ThreadPool");
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//判斷如果獲取到的是目錄,直接放行
if(pathname.isDirectory())
return true;
//獲取路徑中的檔案名,判斷是否java結尾,是就回傳true
return pathname.getName().toLowerCase().endsWith("java");
}
});
for(File file : files){
System.out.println(file);
}
遞回
指在當前方法內呼叫自己的這種現象,
public static void a(){
a();
}
遞回求和
計算1 ~ n的和
分析:num的累和 = num + (num-1)的累和,所以可以把累和的操作定義成一個方法,遞回呼叫,
實作代碼:
public static void main(String[] args) {
//計算1~num的和,使用遞回完成
int num = 5;
// 呼叫求和的方法
int sum = getSum(num);
// 輸出結果
System.out.println(sum);
}
public static int getSum(int num) {
/*
num為1時,方法回傳1,
相當于是方法的出口,num總有是1的情況
*/
if(num == 1){
return 1;
}
/*
num不為1時,方法回傳 num +(num-1)的累和
遞回呼叫getSum方法
*/
return num + getSum(num-1);
}
遞回求階乘
階乘:所有小于及等于該數的正整數的積,
分析:n的階乘:n! = n * (n-1) ... 3 * 2 * 1
//計算n的階乘,使用遞回完成
public static void main(String[] args) {
int n = 3;
// 呼叫求階乘的方法
int value = https://www.cnblogs.com/paopaoT/archive/2023/04/16/getValue(n);
// 輸出結果
System.out.println("階乘為:"+ value);
}
public static int getValue(int n) {
// 1的階乘為1
if (n == 1) {
return 1;
}
/*
n不為1時,方法回傳 n! = n*(n-1)!
遞回呼叫getValue方法
*/
return n * getValue(n - 1);
}
目錄遍歷
遍歷目錄下的所有檔案和所有的子目錄,
分析:目錄遍歷,無法判斷多少級目錄,所以在遍歷需要進行判斷,如果遍歷到的還是目錄,就要使用遞回,遍歷所有目錄,
public static void main(String[] args){
// 創建File物件
show(new File("./").getAbsoluteFile());
}
public static void show(File dir) {
// 獲取子檔案和目錄
File[] files = dir.listFiles();
// 回圈列印
for (File file : files) {
//判斷是檔案,直接輸出
if (file.isFile()) {
System.out.println(file);
} else {
// 是目錄,繼續遍歷,形成遞回
show(file);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550239.html
標籤:其他
上一篇:Apache httpd 入門實戰(2)--簡單使用
下一篇:Rust編程語言入門之智能指標