JavaSE常用類之File類
- 2022 年 4 月 6 日
- 筆記
- JavaSE, javaSE學習
File類
只用於表示文件或目錄的資訊,不能對文件內容進行訪問。
java.io.File類∶代表文件和目錄。在開發中,讀取文件、生成文件、刪除文件、修改文件的屬性時經常會用到本類。
File類不能訪問文件內容本身,如果需要訪問文件內容本身,則需要藉助輸入輸出流。
一.創建文件對象
package Filel;
import java.io.File;
public class Filelfd {
public static void main(String[] args) {
//創建一個File對象
File file = new File("D:\\R");
System.out.println(file); //D:\R
//user.dir 用戶目錄
System.out.println(System.getProperty("user.dir")); //D:\JavaSE\OPP
}
}
二.創建文件
package Filel;
import java.io.File;
import java.io.IOException;
//假設要創建一個 zyx.txt 文件,程式啟動時會檢測該文件是否存在,如果不存在則創建;如果存在則刪除它再創建。
public class Filelc {
public static void main(String[] args) throws IOException {
File file = new File("D:\\zyx.txt"); //創建file對象
if(file.exists()){ //判斷文件是否存在
file.delete(); //刪除文件
System.out.println("文件已刪除");
}
//創建新的文件
try {
//創建新的文件
file.createNewFile(); //需要拋出
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件已重新創建");
}
}
三.查看文件屬性
package Filel;
import java.io.File;
import java.util.Date;
//查看文件基本屬性
public class Filefs {
public static void main(String[] args) {
String path1="D:\\SteamLibrary\\steamapps\\common\\Tricolour Lovestory\\savedata\\chs";
String path2="JavaSE";
showFileDetails(path1);
showFileDetails(path2);
}
public static void showFileDetails(String path){
File file = new File(path);
System.out.println("==========================================");
System.out.println("文件名字:"+file.getName());
System.out.println("文件長度:"+file.length()+"位元組");
System.out.println((file.isDirectory()? "是目錄" : "是文件" ));
System.out.println((file.canRead()? "能讀" : "不能讀" ));
System.out.println((file.canWrite()? "能寫" : "不能寫" ));
System.out.println((file.isHidden()? "隱藏" : "沒隱藏" ));
System.out.println("文件路徑:"+file.getPath());
System.out.println("文件帶域名的完整路徑:"+file.getAbsolutePath());
System.out.println("伺服器端文件的最後修改時間:"+new Date(file.lastModified()));
System.out.println("==========================================");
}
}
四.文件修改、查看、刪除等。
1.遞歸遍歷輸出目錄文件
通過遍歷目錄可以在指定的目錄中查找文件,或者顯示所有的文件列表。File 類的 list() 方法提供了遍歷目錄功能,該方法有如下兩種重載形式。
String[] list():該方法表示返回由 File 對象表示目錄中所有文件和子目錄名稱組成的字元串數組,如果調用的 File 對象不是目錄,則返回 null。
String[] list(FilenameFilter filter):該方法的作用與 list() 方法相同,不同的是返回數組中僅包含符合 filter 過濾器的文件和目錄,如果 filter 為 null,則接受所有名稱。
使用過濾器輸出指定的文件,假設希望只列出目錄下的某些文件,這就需要調用帶過濾器參數的 list() 方法。首先需要創建文件過濾器,該過濾器必須實現 java.io.FilenameFilter 介面,並在 accept() 方法中指定允許的文件類型。
2.delete和deleteOnExit方法的區別。
delete()方法:當調用delete()方法時,直接刪除文件,不管該文件是否存在,一經調用立即執行;
deleteOnExit()方法:即該方法是將刪除的命令快取了一下,到服務停止的時候再進行操作
file.deleteOnExit();
file.createNewFile();
此處的deleteOnExit()是在JVM退出的時候才執行的,因此相當於是先調用了createNewFile()再調用deleteOnExit();
package Filel;
import java.io.File;
import java.io.FilenameFilter;
public class Filexg {
public static void main(String[] args) {
File file = new File("D:\\www\\zys.txt");
//設置文件只讀(只能打開來觀看,不能修改也不能儲存)
//該方法返回布爾數據類型。如果File對象可以設置為Read Only,則該函數返回true,否則返回false。
System.out.println(file.setReadOnly());
//文件重命名
//該方法返回布爾數據類型。如果File對象修改成功,則該函數返回true,否則返回false。
File dest = new File("D:\\www\\zyl.txt");
boolean b = file.renameTo(dest); //修改file對象名字
System.out.println(b);
//文件刪除
File l = new File("D:\\www\\zzx.txt");
l.deleteOnExit();
File dir = new File("D:\\www");
//目錄的創建
// dir.mkdirs();//可以創建多級目錄
dir.mkdir();//只能創建一級目錄
//目錄的讀取
System.out.println("修改時間:"+dir.lastModified());
System.out.println("目錄路徑:"+dir.getPath());
System.out.println("目錄名:"+dir.getName());
//目錄名修改
dir.renameTo(new File("D:\\www22"));
//目錄刪除
dir.deleteOnExit();
//***遞歸遍歷輸出目錄文件****
//獲取當前目錄下的所有文件及文件名
File hx = new File("D:\\www22");
String[] paths = hx.list();
for (String path : paths) {
System.out.println(path);
}
System.out.println("===============================");
//)獲取指定目錄所有文件帶域名完整目錄對象
File[] fs = hx.listFiles();
for(File f: fs){
System.out.println(f);
}
//獲取指定格式的文件資訊
//過濾器
File[] files = hx.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("z");
}
});
for (File ol : files) {
System.out.println(ol.getName()+" : "+ol.getPath());
}
}
}
五.枚舉
enum 枚舉名 {
枚舉體(常量列表)
}
當你需要定義一組常量時,可以使用枚舉類型
package Filel;
import java.util.Random;
//枚舉
public class Filemeiju {
enum Week {
周一, 周二, 周三, 周四, 周五, 周六,周日
}
public static void main(String[] args) {
//Week.values()相當於數組名字 = args
//Week.values()[i]=args[i]
//Week.values().for
for (Week value : Week.values()) {
System.out.print(value+" ");
}
System.out.println();
System.out.println("############################");
Random random = new Random();
int i= random.nextInt(7);
System.out.println(i);
switch (Week.values()[i]){
case 周一:
System.out.println("周一啦");
break;
case 周二:
System.out.println("周二啦");
break;
case 周三:
System.out.println("周三啦");
break;
case 周四:
System.out.println("周四啦");
break;
case 周五:
System.out.println("周五啦");
break;
case 周六:
System.out.println("周六啦");
break;
case 周日:
System.out.println("周日啦");
break;
}
}
}