File類:
1、構造函數和字段下圖中是File類中的構造函數,separator是File類中的靜態字段,表示名稱分隔符,在windows中是‘\’。pathSeparator是File類中的靜態字段,表示路徑分隔符,在windows中是“;”(分號)。
public static void constructorDemo()
{
File f1 = new File("c:\\a.txt");
File f2 = new File("c:\\", "a.txt");
File f = new File("c:\\");
File f3 = new File(f, "a.txt");
File f4 = new File("c:" + File.separatorChar + "a.txt");
System.out.println(f4);//c:\a.txt
}
2、常見方法
(1)獲取
1.1 獲取文件名稱。
1.2 獲取文件路徑。
1.3 獲取文件大小。
1.4 獲取文件修改時間。
下圖中第4行獲取文件的名稱,第5行獲取文件的絕對路徑,第6行獲取文件的相對路徑,第7行獲取文件的大小,第8行獲取文件最後一次修改時間,返回毫秒值。
public static void getDemo()
{
File file = new File("demo.txt");
String name = file.getName();
String absPath = file.getAbsolutePath();
String path = file.getPath();
long len = file.length();
long time = file.lastModified();
System.out.println(name);//demo.txt
System.out.println(absPath);//E:\java workspace\OtherAPI\demo.txt
System.out.println(path);//demo.txt
System.out.println(len);//4
System.out.println(time);//1434104737956
}
(2)創建和刪除
下圖中第3行建立文件流對象,並關聯文件。第4行使用createNewFile()方法創建一個新文件,返回值是boolean類型,表示如果創建成功就返回true,如果創建失敗就返回false。文件和文件夾的創建和輸出流不一樣,如果文件或文件夾不存在則創建,如果存在則不創建。第6行使用delete()方法刪除文件,刪除成功返回true,刪除失敗返回false。如果要刪除的文件正在被流操作,那也不能刪除成功,返回false。第9行使用mkdir()方法創建一個文件夾"abc",注意,這個方法只能創建單個文件夾,不能創建多級目錄的文件夾,創建成功返回true,失敗返回false。第10行使用delete()方法刪除文件夾,如果文件夾中有文件,就不能刪除,而且刪除的文件夾不會放在回收站中。要創建多級目錄的文件夾要使用mkdirs()方法,如第12行,第13行刪除文件夾實際上刪除的是文件夾e,因爲第11行構造函數中實際關聯的是文件夾e,之前的都是目錄。
public static void createAndDeleteDemo() throws IOException
{
File file = new File("file.txt");
// boolean b = file.createNewFile();
// System.out.println("b = " + b);
// boolean b = file.delete();
// System.out.println("b = " + b);
// File dir = new File("abc");
// System.out.println(dir.mkdir());//只創建單個文件夾,不能創建多級目錄的文件夾
// System.out.println(dir.delete());//如果文件夾中有文件,就不能刪除。刪除的文件夾不會在回收站中
File dirs = new File("a\\b\\c\\d\\e");
System.out.println(dirs.mkdirs());//true
System.out.println(dirs.delete());//true
}
(3)判斷
下圖中第4行用exists()方法判斷文件是否存在,第5行用isFile()判斷是否爲文件。如果文件不存在時,返回的也是false。第6行用isDirectory()方法判斷是否爲目錄。
public static void isDemo()
{
File file1 = new File("demo.txt");
System.out.println(file1.exists());//true
System.out.println(file1.isFile());//true
System.out.println(file1.isDirectory());//false
}
(4)重命名
下圖中調用renameTo()方法,將文件0.txt重命名爲1.txt,也可以把指定命名後的文件的所在路徑,比如d:\\1.txt,這樣重命名後,原來e:\\0.txt 就會消失,而出現在d盤下1.txt。
public static void renameToDemo()
{
File f1 = new File("e:\\0.txt");
File f2 = new File("e:\\1.txt");
f1.renameTo(f2);
}
(5)系統根目錄和容量
下圖中第3行調用File的靜態方法listRoots(),返回系統更目錄,放在一個File對象數組中,輸出時會看到所有系統的根目錄。第14行中,調用的方法獲得指定目錄的空閒空間,第15行獲取的是總空間。
public static void listRootsDemo()
{
File[] files = File.listRoots();
for(File file : files)
{
System.out.println(file);
}
/*輸出
* C:\
D:\
E:\
F:\
G:\*/
File f = new File("d:\\");
System.out.println("空閒空間:" + f.getFreeSpace());//
System.out.println("總空間:" + f.getTotalSpace());//
}
(6)獲取目錄內容
下圖中第4行用list()方法,獲取當前目錄下的文件以及文件夾的名稱,包括隱藏文件。注意:調用list方法的File對象中封裝的必須是目錄,否則會發生NullPointerException,因爲String數組根本就沒有創建成功。如果訪問系統級目錄,也會發生空指針異常。如果目錄存在,但是沒有內容,會返回一個數組,但是長度爲0。
public static void listDemo()
{
File file = new File("d:\\");
String[] names = file.list();
for(String name : names)
{
System.out.println(name);
}
}
(7)過濾器
如果使用list()方法只要獲取指定的文件,就要使用過濾器。如下圖11-18行,定義一個類FilterByJava,實現了過濾器接口FilenameFilter,這個接口中只有一個方法就是accept,我們必須重寫改方法。參數中dir是文件的路徑,name是文件名。只有滿足條件的文件才返回true,否則返回false。第4行就使用list的重載函數,傳遞過濾器對象作爲市場,返回指定條件的文件名稱。其實過濾器的實現就是先調用list,把該目錄下的所有文件名都放在一個容器中,然後在逐個判斷是否滿足條件,最後把滿足條件的文件名返回。
public static void listDemo1()
{
File file = new File("e:\\");
String[] names = file.list(new FilterByJava());
for(String name : names)
{
System.out.println(name);
}
}
public class FilterByJava implements FilenameFilter
{
public boolean accept(File dir, String name)
{
return name.endsWith(".java");
}
}