一 File 類
File 是文件或者目錄的抽象表示形式 .也就是說它既可以表示一個標準文件(比如 : *.txt等)也可以表示一個目錄(一組文件的集合).
說明 : 由于本文只是學習File類的相關API,因此直接使用代碼來測試API,代碼中有相應注釋. 因此在代碼之外不會有過多的文字描述.
1.1 File 類的靜態(tài)成員.
注意 : 名稱 != 路徑
// 與系統(tǒng)有關的默認 名稱 分割符.
System.out.println("名稱分割符 : " + File.separator);
System.out.println("名稱分割符 : " + File.separatorChar);
// 與系統(tǒng)有關的 路徑 分隔符
System.out.println("路徑分割符 : " + File.pathSeparator);
System.out.println("路徑分割符 : " + File.pathSeparatorChar);
// 輸出
// 名稱分割符 : \
// 名稱分割符 : \
// 路徑分割符 : ;
// 路徑分割符 : ;
1.2 創(chuàng)建 File 和 文件.
/**
* 創(chuàng)建和修改.
*/
public static void testFile_04() {
// 創(chuàng)建 File ,如果文件路徑不存在則同樣可以創(chuàng)建一個File實例.
// 因此不要使用 file==null 判斷文件是否存在.應該使用 file.exists();
File file1 = new File("D:/TestForlder/123.txt");
System.out.println("存在 : " + file1.exists());
// 當文件不存在時創(chuàng)建文件
try {
System.out.println(file1.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
// 創(chuàng)建臨時文件
try {
// 注意文件名稱不是 "456.java" ,而是 "456" + "系統(tǒng)生成的字符串" + ".java"
// 臨時文件 : D:\TestForlder\4563410495359450983005.java
File file2 = File.createTempFile("456", ".java",new File("D:/TestForlder"));
System.out.println("臨時文件 : " + file2.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
// 刪除文件
System.out.println(file1.delete());
// 在虛擬機終止時哄陶,請求刪除此抽象路徑名表示的文件或目錄。
new File("D:/TestForlder/1.java").deleteOnExit();
// 創(chuàng)建路徑 , 父目錄必須存在.不會自動創(chuàng)建父目錄.
System.out.println("創(chuàng)建路徑 : " + new File("D:/TestForlder/111").mkdir());
// 創(chuàng)建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
System.out.println("遞歸創(chuàng)建目錄 : " + new File("D:/TestForlder/222/333").mkdirs());
// 重命名文件.
System.out.println(new File("D:/TestForlder/2.java")
.renameTo(new File("D:/TestForlder/重命名.java")));
}
1.3 設置文件屬性.
/**
* 設置文件屬性.
*/
public static void testFile_05() {
File file = new File("D:/TestForlder/3.java");
// 設置 所有者執(zhí)行權限
file.setExecutable(true);
// 設置所有者或所有用戶執(zhí)行權限
file.setExecutable(true, false);
// 設置最后修改時間
file.setLastModified(123);
// 設置所有者讀權限
file.setReadable(true);
// 設置所有者或所有用戶的讀
file.setReadable(true, false);
// 設置只讀
file.setReadOnly();
// 設置所有者寫權限
file.setWritable(true);
// 設置所有者或者所有用戶的寫權限
file.setWritable(true, false);
}
1.4 基本信息API
/**
* File 獲取信息.
*/
public static void testFile_03() {
// getName() : 返回由此抽象路徑名表示的文件或目錄的名稱醋奠。該名稱是路徑名名稱序列中的最后一個名稱丸相。如果路徑名名稱序列為空,則返回空字符串绝页。
// getPath() : 將此抽象路徑名轉換為一個路徑名字符串晃虫。所得字符串使用默認名稱分隔符分隔名稱序列中的名稱皆撩。
// getParent() : 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null扛吞。
// 局對路徑
File file = new File("D:/TestForlder");
System.out.println("絕對路徑 : " + file.getPath());
// 相對路徑
File file2 = new File(".");
System.out.println("相對路徑 : " + file2.getPath());
// 獲取絕對路徑 File JDK 文檔上說是相當于 : new File(file2.getAbsolutePath());
File fileAb = file2.getAbsoluteFile();
File fileAb2 = new File(file.getAbsolutePath());
System.out.println("絕對路徑文件 : " + fileAb.getPath());
// File 對象的局對路徑.
System.out.println("絕對路徑 : " + file.getAbsolutePath());
// 指定路徑所在分區(qū)的剩余空間.
System.out.println("可用空間 : " + file.getFreeSpace() / (1024 * 1024 * 1024) + " G");
// 獲取父目錄名稱
System.out.println("父目錄名稱 : " + file.getParent());
// 此路徑上的總空間
System.out.println("總空間 : " + file.getTotalSpace() / (1024 * 1024 * 1024) + " G");
// 抽象路徑名指定的分區(qū)上可用于此虛擬機的字節(jié)數(shù)呻惕。
System.out.println("JVM 可用空間 : " + file.getUsableSpace() / (1024 * 1024 * 1024) + " G");
// 最后修改時間
System.out.println("最后修改時間 : " + file.lastModified());
// 文件長度
System.out.println("文件長度 : " + file.length());
System.out.println("執(zhí)行 : " + file.canExecute());
System.out.println("可讀 : " + file.canRead());
System.out.println("可寫 : " + file.canWrite());
System.out.println("存在 : " + file.exists());
System.out.println("絕對路徑 : " + file.isAbsolute());
System.out.println("目錄 : " + file.isDirectory());
System.out.println("標準文件 : " + file.isFile());
System.out.println("隱藏文件 : " + file.isHidden());
}
1.6 基本目錄操作
/**
* 目錄下文件.
*/
public static void testFile_01() {
// 文件路徑.
String filePath = "D:/TestForlder";
// 創(chuàng)建目錄File對象.
File file = new File(filePath);
// 獲取目錄下的所有文件. 使用正則表達式查找所有的 ".java" 文件.
String[] list = file.list(new MainEntry.DirFilter("\\w+.java"));
// 排序
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
// 打印
for (String string : list) {
System.out.println("文件 : D:/TestFordler/" + string);
}
}
/**
* @author WSJ
* 文件名稱過濾器,<br>
* 該類實現(xiàn)了 `FilenameFilter`接口.該接口只有一個`accept()`方法
* 該目錄下的每一個文件口會執(zhí)行該方法,來確定是否符合條件.
*/
public static class DirFilter implements FilenameFilter {
// 正則表達式
private Pattern mPattern;
public DirFilter(String regex) {
mPattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
// 使用正則表達式過濾文件, 每一個文件都會在這個方法中進行判斷是否符合條件.
return mPattern.matcher(name).matches();
}
}