1. File類
- 文件和目錄路徑名的抽象表示形式。
public class File
extends Object
implements Serializable, Comparable<File>
構(gòu)造方法:
- 沒有無參構(gòu)造。
File(File parent, String child)
從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實(shí)例。
File(String pathname)
通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實(shí)例。
File(String parent, String child)
從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實(shí)例。
File(URI uri)
通過將給定的 file: URI轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實(shí)例。
常用方法:參考File類 jdk1.8 API
部分常用方法演示:
public class TestFiles {
public static void main(String[] args) throws IOException, Exception {
File file = new File("files\\test\\target.txt");
System.out.println(file.canExecute()); // 該文件/目錄可執(zhí)行
System.out.println(file.canWrite()); // 該文件可寫
System.out.println(file.canRead()); // 該文件可讀
System.out.println(file.createNewFile()); // 受查異常:如果不存在,新建該文件
System.out.println(file.delete()); // 刪除該文件(如果文件存在)
Thread.sleep(2000);
file.deleteOnExit(); // JVM終止時,執(zhí)行刪除文件
System.out.println(file.exists()); // 該文件存在,于createNewFile()結(jié)合使用
System.out.println(file.getFreeSpace()/1024/1024/1024 + "GB"); // 獲取硬盤的空閑空間(計算為GB)
System.out.println(file.getTotalSpace()/1024/1024/1024 + "GB"); // 獲取硬盤總空間(計算為GB)
System.out.println(file.getAbsolutePath()); // 獲取絕對路徑字符串
System.out.println(file.getPath()); // 獲取相對路徑字符串
System.out.println(file.getName()); // 獲取文件名:文件名.后綴名
System.out.println(file.getParent()); // 獲取父目錄
System.out.println(file.isDirectory()); // 文件目錄判斷
System.out.println(file.isFile()); // 標(biāo)準(zhǔn)文件判斷
System.out.println(file.isHidden()); // 隱藏文件判斷
// 文件最后一次修改時間(long類型的毫秒值)
System.out.println((System.currentTimeMillis()-file.lastModified()) / 1000 / 60); // xx分鐘前修改的
System.out.println(file.length()); // 文件內(nèi)容的字節(jié)
file.mkdirs(); // 將file中指定的路徑全部創(chuàng)建為目錄
System.out.println(file);
}
}
2. FileFilter接口實(shí)現(xiàn)過濾指定文件
FileFilter接口:
public interface FileFilter {
//測試指定的抽象路徑名是否應(yīng)包含在某個路徑列表
boolean accept(File pathname);
}
- 當(dāng)調(diào)用File類中的listFiles()方法時,支持傳入FileFilter接口的實(shí)現(xiàn)類對象,對獲取文件進(jìn)行過濾,只有滿足條件的文件才可出現(xiàn)在listFiles()的返回值中。——接口回調(diào)。
案例:統(tǒng)計指定類型的文件和數(shù)量
public class TestShowAllFiles {
static int fileCount = 0;
public static void main(String[] args) {
// 遍歷E盤下,所有的.class結(jié)尾的文件
File file = new File("E:\\");
showAll(file);
System.out.println("一共有 " + fileCount + " 個.class文件");
}
public static void showAll(File dir) {
// 實(shí)現(xiàn)FileFilter接口的匿名內(nèi)部類,作為過濾參數(shù)傳入
File[] files = dir.listFiles( new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return true; // 文件夾保存
}
if (pathname.isFile()) {
if (pathname.getName().endsWith(".class")) {
return true; // 文件
}
}
return false;
}
});
// 避免遍歷到結(jié)尾拋出空指針異常(因?yàn)榭漳夸浺矔槐4娴綌?shù)組)
if (files != null) {
for (File f : files) {
if (f.isFile()) { // 符合規(guī)則的文件,則輸出
System.out.println(f.getName());
fileCount++;
} else { // 子目錄,則遍歷
showAll(f);
}
}
}
}
}