File類的作用:
Java的io包中定義了File類,用於對文件或文件夾的管理操作。
File類只能夠用於表示文件或文件夾的信息(屬性)和對該文件或文件夾的刪除創建操作
(不能對內容進行訪問)
通過創建File類對象可以用程序來操作電腦上的文件或文件夾。
File類的構造方法:
File(String path):通過指定的路徑名字符串來創建一個新的File對象,抽象路徑名是用來表示某個文件或文件夾的路徑定位。
File(File parent,String path):根據parent父文件對象和path子文件名字符串來創建一個新的File對象。
File類的常用API
文件操作:
exists():判斷文件是否存在:返回值為布爾值
getCanonicalPath() :獲取當前文件的標准路徑名
separator:用於表示路徑層級分割符,可以避免不同操作系統的分割符不一致的情況
createNewFile():在硬盤中創建一個文件
length():長度
lastModified():創建時間:new Date(File.lastModified())
delete():刪除
getName():獲得文件或文件夾名
文件夾操作:
exists():判斷文件是否存在:返回值為布爾值
getCanonicalPath() :獲取當前文件的標准路徑名
separator:用於表示路徑層級分割符,可以避免不同操作系統的分割符不一致的情況
boolean mkdir():創建文件夾
mkdirs():如果父文件夾不存在就一起創建
listFiles():該方法返回的路徑名用於表示此抽象路徑名的目錄中的文件和目錄的數組
listFiles(FileFilter filter) :該方法返回的路徑名用於表示此抽象路徑名的目錄中的文件和目錄的數組,並且帶有FileFilter類型的過濾器
isDirectory():判斷是否文件夾
delDirectory(pp):調用刪除文件夾方法
1 public void testFile01() throws IOException{
2 //在計算機內存中創建一個File對象,用來對應計算機的存儲硬盤中的當前文件夾
3 File file = new File(".");
4 System.out.println("當前文件夾是否存在:"+file.exists());
5 System.out.println("查看當前文件夾的路徑位置:"+file.getCanonicalPath());
6 //與硬盤中是否存在文件夾沒有直接聯系,只是存在JVM中的對象
7 File fileDemo = new File(file,"fileDemo");
8 System.out.println("查看當前文件夾中是否存在fileDemo文件夾:"+fileDemo.exists());
9 if(!fileDemo.exists()){
10 fileDemo.mkdir();//創建出fileDemo文件夾
11 }
12
13 File testFile = new File(file,"aa"+File.separator+"testFile");
14 if(!testFile.exists()){
15 // boolean flag = testFile.mkdir();
16 // System.out.println("創建結果:"+flag);
17 testFile.mkdirs();//創建文件夾,當父目錄不存在會把父目錄先創建出來
18 }
19
20 File aFile = new File(fileDemo,"a.txt");
21 System.out.println("a.txt在硬盤中是否存在:"+aFile.exists());
22 if(!aFile.exists()){
23 aFile.createNewFile();//在硬盤中創建一個文件
24 }
25 System.out.println("a.txt在硬盤中是否存在:"+aFile.exists());
26 System.out.println("a.txt的標准路徑為:"+aFile.getCanonicalPath());
27 System.out.println("a.txt的文件長度為:"+aFile.length());
28 System.out.println("a.txt的創建時間:"+new Date(aFile.lastModified()));
29 /*
30 * 刪除文件對象表示的文件或文件夾,成功刪除返回true。
31 * 如果文件對象表示的是一個文件夾,刪除的時候必須保證此文件夾是空文件夾才能刪除
32 */
33 aFile.delete();
34 //刪除aa會失敗
35 File aa = new File(file,"aa");
36 aa.delete();
37 }
public void testFile02(){
File file = new File(".");//當前文件夾對象
File[] files = null;
if(file.exists()){
//listFiles():查看當前文件夾下有什麼子文件或子文件夾,如果文件夾路徑為空,返回空
//如果此路徑名不是表示一個文件夾或者發生了I/O異常,也返回null
files = file.listFiles();
}
for(File f:files){
//getName():獲得文件或文件夾名
System.out.println(f.getName());
}
}
public void testFile03() throws IOException{
File path = new File(".");
File pppp = new File(path,"pp"+File.separator+"ppp"+File.separator+"pppp");
File demoFile = new File(pppp,"demo.txt");
if(!pppp.exists()){
pppp.mkdirs();//將父文件夾與子文件夾一起創建
}
if(!demoFile.exists()){
demoFile.createNewFile();//創建文件
}
File pp = new File(path,"pp");
delDirectory(pp);//調用刪除文件夾方法下面沒有文件則可以成功
}
//使用遍歷方法刪除文件夾,如果內部有文件則刪除文件,防止無法刪除文件夾
public static void delDirectory(File dir) throws IOException{
if(!dir.exists()){//如果文件夾不存在,拋出運行時異常
throw new RuntimeException("文件夾"+dir+"不存在");
}
if(!dir.isDirectory()){//判斷是否文件夾
throw new RuntimeException(dir+"不是目錄");
}
File[] subs = dir.listFiles();
if(subs!=null&&subs.length>0){//遍歷所有子文件和文件夾,刪除裡面內容
//遍歷所有的subs
for(File f:subs){
if(!f.isDirectory()){//不是文件夾就是文件
System.out.println("文件名為:"+f.getName());
if(!f.delete()){//如果刪除失敗則拋出異常,如果成功則不進來,文件也刪掉了
throw new IOException("無法刪除文件"+f.getName());
}
}else{//文件夾處理
System.out.println("開始處理文件夾"+f.getName());
delDirectory(f);//調用刪除文件夾方法,刪除子文件夾
System.out.println("子文件夾已經刪除,開始刪除該文件夾"+f.getName());
f.delete();//刪除完子文件和子文件夾後,需要刪除當前的文件夾
}
}
}
dir.delete();//刪除dir目錄的內容
}
//使用過濾器過濾掉一部分文件,處理符合規則的文件
public void testFile04(){
File file = new File("src"+File.separator+"day07");//創建文件對象
FileFilter filter = new FileFilter(){
//該方法用於定義過濾規則,如果return true則表示符合規則的
//返回值為false 則表示不符合規則的
@Override
public boolean accept(File pathname) {
//matches匹配符合正則表達式規則的內容
if(pathname.getName().matches(".*[.]java")){
return true;
}
return false;
}
};
//傳入過濾器對象,過濾掉不符合規則的file對象
File[] paths = file.listFiles(filter);
for(File f:paths){
System.out.println(f.getName());
}
}