File類說明
存儲在變量,數組和對象中的數據是暫時的,當程序終止時他們就會丟失.爲了能夠永久的保存程序中創建的數據,需要將他們存儲到硬盤或光盤的文件中.這些文件可以移動,傳送,亦可以被其他程序使用.由於數據存儲在文件中,所以我們需要學習一個和文件有密切關係的類,叫做File類,將要掌握獲取文件的屬性以及刪除和重命名文件.最終如何向文件中寫入數據和從文件中讀取數據.
那麼File類關心的是在磁盤上文件的存儲.
File類描述的是一個文件或文件夾。(文件夾也可以稱爲目錄)
該類的出現是對文件系統的中的文件以及文件夾進行對象的封裝。可以通過對象的思想來操作文件以及文件夾。可以用面向對象的處理問題,通過該對象的方法,可以得到文件或文件夾的信息方便了對文件與文件夾的屬性信息進行操作。
文件包含很多的信息:如文件名、創建修改時間、大小、可讀可寫屬性等。
創建:
createNewFile() 在指定位置創建一個空文件,成功就返回true,如果已存在就不創建然後返回false
mkdir() 在指定位置創建目錄,這隻會創建最後一級目錄,如果上級目錄不存在就拋異常。
mkdirs() 在指定位置創建目錄,這會創建路徑中所有不存在的目錄。
renameTo(File dest) 重命名文件或文件夾,也可以操作非空的文件夾,文件不同時相當於文件的剪切,剪切時候不能操作非空的文件夾。移動/重命名成功則返回true,失敗則返回false。
刪除:
delete() 刪除文件或一個空文件夾,如果是文件夾且不爲空,則不能刪除,成功返回true,失敗返回false。
deleteOnExit() 在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄,保證程序異常時創建的臨時文件也可以被刪除
判斷:
exists() 文件或文件夾是否存在。
isFile() 是否是一個文件,如果不存在,則始終爲false。
isDirectory() 是否是一個目錄,如果不存在,則始終爲false。
isHidden() 是否是一個隱藏的文件或是否是隱藏的目錄。
isAbsolute() 測試此抽象路徑名是否爲絕對路徑名。
獲取:
getName() 獲取文件或文件夾的名稱,不包含上級路徑。
getPath() 返回絕對路徑,可以是相對路徑,但是目錄要指定
getAbsolutePath() 獲取文件的絕對路徑,與文件是否存在沒關係
length() 獲取文件的大小(字節數),如果文件不存在則返回0L,如果是文件夾也返回0L。
getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回null。
lastModified() 獲取最後一次被修改的時間。
文件夾相關:
staic File[] listRoots() 列出所有的根目錄(Window中就是所有系統的盤符)
list() 返回目錄下的文件或者目錄名,包含隱藏文件。對於文件這樣操作會返回null。
list(FilenameFilter filter) 返回指定當前目錄中符合過濾條件的子文件或子目錄。對於文件這樣操作會返回null。
listFiles() 返回目錄下的文件或者目錄對象(File類實例),包含隱藏文件。對於文件這樣操作會返回null。
listFiles(FilenameFilter filter) 返回指定當前目錄中符合過濾條件的子文件或子目錄。對於文件這樣操作會返回null。
例————顯示某路徑下所有的文件與文件夾
public static void listAllFilesAndDirs2(String path) {
// 1.創建File對象,表示這個目錄
File dir = new File(path);
// 2通過listFiles方法得到所包含的所有子目錄與子文件名稱
File[] names = dir.listFiles();
// 3,分別顯示文件名與文件夾名
for (int i = 0; i < names.length; i++) {
File file = names[i];
if (file.isFile()) {
System.out.println(("子文件:"));
System.out.println("\t" + file.getName());
} else if (file.isDirectory()) {
System.out.println(("子目錄:"));
System.out.println("\t" + file.getName());
}
}
}
例二:列出指定目錄中所有擴展名爲指定內容的文件。
1.傳統方法
public class FileTest2 {
public static void main(String[] args) {
String path = "c:" + File.separatorChar + "test";
File file = new File(path);
listtAllFiles(file, "java");
}
/**
* 從指定目錄中找到指定擴展名的文件,並列出來
*
*/
public static void listtAllFiles(File dir, String extension) {
// 1.獲取所有的子文件和子文件夾
File[] files = dir.listFiles();
// 2.從中找出符合條件的文件並顯示出來
for (int i = 0; i < files.length; i++) {
File file = files[i];
// 3.需要以指定文件後綴結尾纔算符合條件
if (file.getName().endsWith(extension)) {
System.out.println(file.getName());
}
}
}
}
2使用filter工具類實現:
public class FileTest2 {
public static void main(String[] args) {
String path = "c:" + File.separatorChar + "test";
File file = new File(path);
listtAllFiles2(file, "txt");
}
/**
* FilenameFilter接口寫一個工具類,可以傳遞指定的過濾規則。
* 從指定目錄中找到指定擴展名的文件,並列出來
*
* */
public static void listtAllFiles2(File dir, String name) {
// 1.獲取所有的子文件和子文件夾
String[] files = dir.list(new DirFilter("txt"));
// 2顯示名稱
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
class DirFilter implements FilenameFilter {
private String extension;
public DirFilter() {
}
public DirFilter(String extension) {
this.extension = extension;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(extension);
}
}