1. File類的概述
File類的概述和作用:java.io.File
* a: File的概念
* File類是文件和目錄路徑名的抽象表示形式
* Java中把文件(file),目錄(directory),或者路徑(path)封裝成File對象
* 我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可
用戶界面和操作系統使用與系統相關的路徑名字符串 來命名文件和目錄。此類呈現分層路徑名的一個抽象的、與系統無關的視圖。抽象路徑名 有兩個組件:
- 一個可選的與系統有關的前綴 字符串,比如盤符,
"/"
表示 UNIX 中的根目錄,"\\\\"
表示 Microsoft Windows UNC 路徑名。 - 零個或更多字符串名稱 的序列。
1.1 靜態成員變量
字段摘要 | |
---|---|
static String |
windows : " ; " linux : " : " |
static char |
pathSeparatorChar 與系統有關的路徑分隔符。 |
static String |
windows : " \ " linux : " / " |
static char |
separatorChar 與系統有關的默認名稱分隔符。 |
構造方法摘要 (有三種構造方法) windows 操作系統文件名和路徑名不區分大小寫; |
|
---|---|
單獨操作父路徑和子路徑;父路經可以直接調用File類方法 |
|
單獨操作父路徑和子路徑; |
|
File(URI uri) 通過將給定的 file: URI 轉換爲一個抽象路徑名來創建一個新的 File 實例。 |
方法摘要 | |
---|---|
boolean |
canExecute() 測試應用程序是否可以執行此抽象路徑名錶示的文件。 |
boolean |
canRead() 測試應用程序是否可以讀取此抽象路徑名錶示的文件。 |
boolean |
canWrite() 測試應用程序是否可以修改此抽象路徑名錶示的文件。 |
int |
compareTo(File pathname) 按字母順序比較兩個抽象路徑名。 |
boolean |
這個方法只能創建文件(默認爲普通文本),不能創造文件夾; |
static File |
createTempFile(String prefix, String suffix) 在默認臨時文件目錄中創建一個空文件,使用給定前綴和後綴生成其名稱。 |
static File |
createTempFile(String prefix, String suffix, File directory) 在指定目錄中創建一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。 |
boolean |
刪除成功返回true,刪除失敗返回false |
void |
deleteOnExit() 在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。 |
boolean |
equals(Object obj) 測試此抽象路徑名與給定對象是否相等。 |
boolean |
exists() 測試此抽象路徑名錶示的文件或目錄是否存在。 |
File |
getAbsoluteFile() 返回此抽象路徑名的絕對路徑名形式。 |
String |
getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串。 |
File |
getCanonicalFile() 返回此抽象路徑名的規範形式。 |
String |
getCanonicalPath() 返回此抽象路徑名的規範路徑名字符串。 |
long |
getFreeSpace() 返回此抽象路徑名指定的分區中未分配的字節數。 |
String |
getName() 返回由此抽象路徑名錶示的文件或目錄的名稱。 |
String |
getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null 。 |
File |
getParentFile() 返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null 。 |
String |
getPath() 將此抽象路徑名轉換爲一個路徑名字符串。 |
long |
getTotalSpace() 返回此抽象路徑名指定的分區大小。 |
long |
getUsableSpace() 返回此抽象路徑名指定的分區上可用於此虛擬機的字節數。 |
int |
hashCode() 計算此抽象路徑名的哈希碼。 |
boolean |
isAbsolute() 測試此抽象路徑名是否爲絕對路徑名。 |
boolean |
isDirectory() 測試此抽象路徑名錶示的文件是否是一個目錄。 |
boolean |
isFile() 測試此抽象路徑名錶示的文件是否是一個標準文件。 |
boolean |
isHidden() 測試此抽象路徑名指定的文件是否是一個隱藏文件。 |
long |
lastModified() 返回此抽象路徑名錶示的文件最後一次被修改的時間。 |
long |
length() 返回由此抽象路徑名錶示的文件的長度。 |
String[] |
遍歷一個目錄,只有名稱; |
String[] |
自定義過濾器,實現FileFilter接口,則需要重寫抽象方法: * listFiles()遍歷目錄的同時,獲取到了文件名全路徑,調用過濾器的方法accept,將獲取到的路徑傳遞給accept方法的參數pathname |
File[] |
遍歷一個目錄,有完整路徑; |
File[] |
|
File[] |
listFiles(FilenameFilter filter) 返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。 |
static File[] |
listRoots() 列出可用的文件系統根。 |
boolean |
|
boolean |
也可以創建單級文件夾,建議用此方法代替mkdir(); |
boolean |
renameTo(File dest) 重新命名此抽象路徑名錶示的文件。 |
boolean |
setExecutable(boolean executable) 設置此抽象路徑名所有者執行權限的一個便捷方法。 |
boolean |
setExecutable(boolean executable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的執行權限。 |
boolean |
setLastModified(long time) 設置此抽象路徑名指定的文件或目錄的最後一次修改時間。 |
boolean |
setReadable(boolean readable) 設置此抽象路徑名所有者讀權限的一個便捷方法。 |
boolean |
setReadable(boolean readable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的讀權限。 |
boolean |
setReadOnly() 標記此抽象路徑名指定的文件或目錄,從而只能對其進行讀操作。 |
boolean |
setWritable(boolean writable) 設置此抽象路徑名所有者寫權限的一個便捷方法。 |
boolean |
setWritable(boolean writable, boolean ownerOnly) 設置此抽象路徑名的所有者或所有用戶的寫權限。 |
String |
toString() 返回此抽象路徑名的路徑名字符串。 |
URI |
toURI() 構造一個表示此抽象路徑名的 file: URI。 |
URL |
toURL() 已過時。 此方法不會自動轉義 URL 中的非法字符。建議新的代碼使用以下方式將抽象路徑名轉換爲 URL:首先通過 toURI 方法將其轉換爲 URI,然後通過 URI.toURL 方法將 URI 裝換爲 URL。 |
1.4 遞歸
* 方法的遞歸調用
* 遞歸分爲兩種,直接遞歸和間接遞歸
* 直接遞歸稱爲方法自身調用自己。間接遞歸可以A方法調用B方法,B方法調用C方法,C方法調用A方法
* 方法自己調用自己
* 適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
* 注意:
* 遞歸一定要有出口, 必須可以讓程序停下
* 遞歸次數不能過多
* 構造方法,禁止遞歸
1.5 例題
遞歸遍歷全目錄,並輸出目錄下的.xlsx文件:
import java.io.File;
public class FullFilesListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\B11資料\\1. RMS 系統");
printXLSX(file);
}
public static void printXLSX(File file) {
// TODO Auto-generated method stub
File [] fileArr = file.listFiles(new MyFliterXlsx());
for (File file2 : fileArr) {
//對f路徑,判斷是不是文件夾
if(file2.isDirectory()){
//遞歸進入文件夾遍歷
printXLSX(file2);
}else{
System.out.println(file2);
}
}
}
}
import java.io.File;
public class MyFliterXlsx implements FileFilter {
public boolean accept(File pathname) {
//判斷獲取的是目錄,直接返回true
if(pathname.isDirectory())
return true;
return pathname.getName().toLowerCase().endsWith(".xlsx");
}
}