Java工具中為我們提供了一個用於管理文件系統的類,這個類就是File類,File類與其他流類不同的是,流類關心的是文件的內容,而File類關心的是磁盤上文件的存儲。
一,File類有多個構造器,常用的構造器有:
1,public File(String pathname){}
在pathname路徑下創建文件對象
2,public File(String path,String name){}
在path參數指定的目錄中創建具有給定名字的File對象,如果path為null,構造器將使用當前目錄創建對象
3,public File(File dir, String name){}
File對象dir表示一個目錄,在dir參數指定的目錄中創建具有給定名字的File對象,如果dir為null,
構造器將使用當前目錄創建對象
二,獲得文件的權限屬性:
1,表明文件是否可讀,可寫,可執行
boolean canRead()
boolean canWrite()
boolean canExecute()
2,設置文件的可讀,可寫,可執行
boolean setReadable(bollean state,bollean ownerOnly)
boolean setWritable((bollean state,bollean ownerOnly)
boolean setExecutable((bollean state,bollean ownerOnly)
3,刪除文件
boolean delete()
如果文件被刪除則返回true,否則返回false
void deleteOnExit()
在虛擬機關閉時將文件刪除
4,判斷文件是否存在
boolean exists()
5,獲得文件路徑名
String getCanonicalPath()
返回包含這個文件的規范路徑名的字符串該方法會使用恰當的目錄分隔符,並可以獲得底層文件系統所選擇的大小寫處理方式
String getName()
返回包含這個File對象的文件名的字符串,但不包含路徑信息
6,判斷File為文件還是目錄
boolean isDirectory()
判斷是否為一個目錄
boolean isFile()
判斷是否為一個文件
7,獲得File對象包含的文件名和目錄名
String[] list()
返回這個File對象包含的文件名和目錄名構成的字符創數組
String[] list(FilenameFilter filter)
返回有這個File對象包含的滿足過濾器條件的文件名和目錄名構成的字符串數組
File還有許多方法屬性,跟多的可以查看API文檔
現在,使用File類來遍歷一個目錄下的所有文件,我的程序過程為:
1,獲取pathName的File對象
2,判斷該文件或目錄是否存在,不存在時在控制台輸出提醒
3,判斷如果不是一個目錄,就判斷是不是一個文件,時文件則輸出文件路徑
4,獲取此目錄下的所有文件名與目錄名的字符串數組
5,如果是一個目錄,搜索深度currentDepth+1,輸出目錄名後,進行遞歸
6,如果是文件,則直接輸出文件名
程序如下:
import java.io.File;
import java.io.IOException;
public class DirErgodic {
private static int depth=1;
public static void find(String pathName,int depth) throws IOException{
int filecount=0;
//獲取pathName的File對象
File dirFile = new File(pathName);
//判斷該文件或目錄是否存在,不存在時在控制台輸出提醒
if (!dirFile.exists()) {
System.out.println("do not exit");
return ;
}
//判斷如果不是一個目錄,就判斷是不是一個文件,時文件則輸出文件路徑
if (!dirFile.isDirectory()) {
if (dirFile.isFile()) {
System.out.println(dirFile.getCanonicalFile());
}
return ;
}
for (int j = 0; j < depth; j++) {
System.out.print(" ");
}
System.out.print("|--");
System.out.println(dirFile.getName());
//獲取此目錄下的所有文件名與目錄名
String[] fileList = dirFile.list();
int currentDepth=depth+1;
for (int i = 0; i < fileList.length; i++) {
//遍歷文件目錄
String string = fileList[i];
//File("documentName","fileName")是File的另一個構造器
File file = new File(dirFile.getPath(),string);
String name = file.getName();
//如果是一個目錄,搜索深度depth++,輸出目錄名後,進行遞歸
if (file.isDirectory()) {
//遞歸
find(file.getCanonicalPath(),currentDepth);
}else{
//如果是文件,則直接輸出文件名
for (int j = 0; j < currentDepth; j++) {
System.out.print(" ");
}
System.out.print("|--");
System.out.println(name);
}
}
}
public static void main(String[] args) throws IOException{
find("D:\\MongoDB", depth);
}
}
測試截圖: