Java的 File類
- File類:
- 相關方法:
- 構造方法:
- 創建文件/目錄:
- 重命名:
- 判斷:
- 獲取:
- 刪除:
- 路徑:
- 相關操作:
- 操作1:
- 目錄存在:
- 一層級的目錄不存在:
- 多層級的目錄不存在:
- 操作2:
- 所有文件信息:
- 文件后綴名為txt:
- API的過濾器:
- 目錄及子目錄文件信息:
?
File類:
File是文件和目錄路徑名的抽象表示。
? ? ? ?File類的對象可以表示文件:C:\Users\ouyang\Desktop\hhh.txt。
? ? ? ?File類的對象可以表示目錄路徑名:C:\Users\ouyang\Desktop。
?
File只關注文件本身的信息(文件名、是否可讀、是否可寫…),而不能操作文件里面的內容。
?
? File類 – 表示文件或文件夾,不能對文件里的數據進行操作。
對文件里的數據進行操作的是:IO流
?
相關方法:
File 方法:
該文件存放的絕對路徑 String getAbsolutPath();
該文件的文件名 String getName();
該文件是否可寫 boolean canWrite();
該文件是否可讀 boolean canRead();
該文件是否為隱藏文件 boolean isHidden();
該文件的長度 int length();
該文件的最后修改時間 long lastModify();
public static void main(String[] args) {//創建file對象File file = new File("C:\\Users\\何小寶\\Desktop\\hhy.txt");System.out.println("獲取文件路徑:" + file.getAbsolutePath());System.out.println("獲取文件名:" + file.getName());System.out.println("獲取文件是否可讀:" + file.canRead());System.out.println("獲取文件是否可寫:" + file.canWrite());System.out.println("獲取文件是否隱藏:" + file.isHidden());System.out.println("獲取文件大小(字節):" + file.length());//格式化日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String datetime = sdf.format(file.lastModified());System.out.println("獲取文件最后修改時間:" + datetime);}
?
?
構造方法:
方法 | 方法介紹 |
---|---|
File(File parent, String child) | 根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。 |
File(String pathname) | 通過將給定路徑名字符串轉換為抽象路徑名來創建一個新 File 實例。 |
File(String parent, String child) | 根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。 |
?
創建文件/目錄:
方法 | 方法介紹 |
---|---|
boolean createNewFile() | 當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。 |
boolean mkdir() | 創建此抽象路徑名指定的目錄。 |
boolean mkdirs() | 創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。 |
?
?
重命名:
方法 | 方法介紹 |
---|---|
boolean renameTo(File dest) | 重新命名此抽象路徑名表示的文件。 |
?
判斷:
方法 | 方法介紹 |
---|---|
boolean isDirectory() | 測試此抽象路徑名表示的文件是否是一個目錄。 |
boolean isFile() | 測試此抽象路徑名表示的文件是否是一個標準文件。 |
boolean isHidden() | 測試此抽象路徑名指定的文件是否是一個隱藏文件。 |
boolean canRead() | 測試應用程序是否可以讀取此抽象路徑名表示的文件。 |
boolean canWrite() | 測試應用程序是否可以修改此抽象路徑名表示的文件。 |
?
?
獲取:
方法 | 方法介紹 |
---|---|
File getAbsoluteFile() | 返回此抽象路徑名的絕對路徑名形式。 |
String getAbsolutePath() | 返回此抽象路徑名的絕對路徑名字符串。 |
String getName() | 返回由此抽象路徑名表示的文件或目錄的名稱。 |
String getParent() | 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。 |
File getParentFile() | 返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null。 |
String getPath() | 將此抽象路徑名轉換為一個路徑名字符串。 |
long lastModified() | 返回此抽象路徑名表示的文件最后一次被修改的時間。 |
long length() | 返回由此抽象路徑名表示的文件的長度。 |
String[] list() | 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。 |
String[] list(FilenameFilter filter) | 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。 |
File[] listFiles() | 返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件。 |
?
刪除:
方法 | 方法介紹 |
---|---|
boolean delete() | 刪除此抽象路徑名表示的文件或目錄。 |
?
?
路徑:
相對路徑:相對于當前項目下的路徑。
?
絕對路徑:從根目錄開始的完整路徑,包含了文件系統中該文件或目錄,所在的完整路徑,通常以根目錄符號(如 Linux 中的“/”,Windows 中的“C:\”)開始。
public static void main(String[] args) {File file = new File("file.txt");//使用的是相對路徑System.out.println(file.length());//C:\wenjian\file.txtSystem.out.println("絕對路徑:" + file.getAbsolutePath());//file.txtSystem.out.println("相對路徑:" + file.getPath());}
?
?
相關操作:
?
操作1:
通過程序,判斷指定路徑的文件是否存在,如果不存在,則創建該文件。
下面按各種情況來解決該問題:
目錄已存在的情況。
有一個層級的目錄不存在的情況。
有多個層級的目錄不存在的情況。
?
目錄存在:
//目錄已存在的情況
public static void main(String[] args) throws IOException {File file = new File("file01\\hhh.txt");//判斷文件是否存在if(!file.exists()){//文件不存在//創建文件file.createNewFile();}}
?
一層級的目錄不存在:
//有一個層級的目錄不存在的情況
public static void main(String[] args) throws IOException {//C:\wenjian\file01\hhh.txtFile file = new File("file01\\hhh.txt");//獲取父路徑 -- C:\wenjian\file01File parentFile = file.getParentFile();//判斷父路徑是否存在if(!parentFile.exists()){//創建一層目錄parentFile.mkdir();}//判斷文件是否存在if(!file.exists()){//創建文件file.createNewFile();}}
?
多層級的目錄不存在:
//有多個層級的目錄不存在的情況
public static void main(String[] args) throws IOException {//C:\wenjian\file01\file02\file03\hhh.txtFile file = new File("file01\\file02\\file03\\hhh.txt");//獲取父路徑 -- C:\wenjian\file01\file02\file03File parentFile = file.getParentFile();//判斷父路徑是否存在if(!parentFile.exists()){//創建多層目錄parentFile.mkdirs();}//判斷文件是否存在if(!file.exists()){//創建文件file.createNewFile();}}
?
?
操作2:
輸出指定目錄下的所有文件信息,比如打印當前項目根目錄下的所有文件信息(只考慮當前目錄,不考慮子目錄)。
要求只輸出文件后綴名為txt的文件。
根據API的過濾器來完成該功能。
需求繼續跟進,列出當前目錄及子目錄中符合該條件的文件信息(遞歸)。
?
所有文件信息:
//輸出指定目錄下的所有文件信息
public static void main(String[] args) {File file = new File("D:\\2023");//獲取當前目錄下所有文件及文件夾的名字
// String[] list = file.list();
// for (String fileName : list) {
// System.out.println(fileName);
// }//獲取當前目錄下所有的file對象File[] listFiles = file.listFiles();//獲取當前目錄下所有的文件及文件夾的file對象for (File f : listFiles) {//可以輸出file對象相關的方法System.out.println(f.getName() + " -- " + f.canRead() + " -- " + f.canWrite());}}
?
文件后綴名為txt:
//要求只輸出文件后綴名為txt的文件
public static void main(String[] args) {File file = new File("D:\\2023");//獲取當前目錄下所有文件及文件夾的名字
// String[] list = file.list();
// for (String fileName : list) {//能輸出文件夾
// if(fileName.endsWith(".txt")){
// System.out.println(fileName);
// }
// }//獲取當前目錄下所有的file對象File[] listFiles = file.listFiles();//獲取當前目錄下所有的文件及文件夾的file對象for (File f : listFiles) {//文件名字String fileName = f.getName();//判斷f是否是文件if(f.isFile() && fileName.endsWith(".txt")){System.out.println(fileName);}}}
?
API的過濾器:
//根據API的過濾器來完成該功能
public static void main(String[] args) {File file = new File("D:\\2023");//過濾器,過濾你不想要的內容,留下你想要的內容。String[] list = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File childFile = new File(dir, name);if(childFile.isFile() && childFile.getName().endsWith(".txt")){return true;}return false;}});for (String fileName : list) {System.out.println(fileName);}}
?
目錄及子目錄文件信息:
//需求繼續跟進,列出當前目錄及子目錄中符合該條件的文件信息(遞歸)
public static void main(String[] args) {File file = new File("D:\\2023");fileHandler(file, ".txt");}public static void fileHandler(File file,String suffix){File[] listFiles = file.listFiles();for (File f : listFiles) {if(f.isFile()){//文件String name = f.getName();if(name.endsWith(suffix)){System.out.println(name);}}else if(f.isDirectory()){//文件夾fileHandler(f, suffix);}}}