Java中File類與FileFilter過濾接口的使用

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);
                        }
                  }
            }
      }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容