JavaDay02 File類

1. File類的概述

File類的概述和作用:java.io.File
        * a: File的概念
            * File類是文件和目錄路徑名的抽象表示形式
            * Java中把文件(file),目錄(directory),或者路徑(path)封裝成File對象
            * 我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可

用戶界面和操作系統使用與系統相關的路徑名字符串 來命名文件和目錄。此類呈現分層路徑名的一個抽象的、與系統無關的視圖。抽象路徑名 有兩個組件:

  1. 一個可選的與系統有關的前綴 字符串,比如盤符,"/" 表示 UNIX 中的根目錄,"\\\\" 表示 Microsoft Windows UNC 路徑名。
  2. 零個或更多字符串名稱 的序列。

 

1.1 靜態成員變量

字段摘要
static String

pathSeparator 
          與系統有關的路徑分隔符,爲了方便,它被表示爲一個字符串。

windows : " ; "

linux : " : "

static char pathSeparatorChar 
          與系統有關的路徑分隔符。
static String

separator 
          與系統有關的默認名稱分隔符,爲了方便,它被表示爲一個字符串。

windows : " \ "

linux : " / "

static char separatorChar 
          與系統有關的默認名稱分隔符。 

 1.2 構造方法

構造方法摘要 (有三種構造方法)

windows 操作系統文件名和路徑名不區分大小寫;

File(File parent, String child) 
          根據 parent 抽象路徑名和 child 路徑名字符串創建一個新 File 實例。

          單獨操作父路徑和子路徑;父路經可以直接調用File類方法

File(String pathname) 
          通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新 File 實例。

File(String parent, String child) 
          根據 parent 路徑名字符串和 child 路徑名字符串創建一個新 File 實例。

          單獨操作父路徑和子路徑;

File(URI uri) 
          通過將給定的 file: URI 轉換爲一個抽象路徑名來創建一個新的 File 實例。

 1.3 File類的方法

方法摘要
 boolean canExecute() 
          測試應用程序是否可以執行此抽象路徑名錶示的文件。
 boolean canRead() 
          測試應用程序是否可以讀取此抽象路徑名錶示的文件。
 boolean canWrite() 
          測試應用程序是否可以修改此抽象路徑名錶示的文件。
 int compareTo(File pathname) 
          按字母順序比較兩個抽象路徑名。
 boolean

createNewFile() 
          當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件。

          這個方法只能創建文件(默認爲普通文本),不能創造文件夾;

static File createTempFile(String prefix, String suffix) 
          在默認臨時文件目錄中創建一個空文件,使用給定前綴和後綴生成其名稱。
static File createTempFile(String prefix, String suffix, File directory) 
           在指定目錄中創建一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。
 boolean

delete() 
          刪除此抽象路徑名錶示的文件或目錄。

          刪除成功返回true,刪除失敗返回false
             *  刪除方法,不走回收站,直接從硬盤中刪除

 void deleteOnExit() 
          在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄。
 boolean equals(Object obj) 
          測試此抽象路徑名與給定對象是否相等。
 boolean exists() 
          測試此抽象路徑名錶示的文件或目錄是否存在。
 File getAbsoluteFile() 
          返回此抽象路徑名的絕對路徑名形式。
 String getAbsolutePath() 
          返回此抽象路徑名的絕對路徑名字符串。
 File getCanonicalFile() 
          返回此抽象路徑名的規範形式。
 String getCanonicalPath() 
          返回此抽象路徑名的規範路徑名字符串。
 long getFreeSpace() 
          返回此抽象路徑名指定的分區中未分配的字節數。
 String getName() 
          返回由此抽象路徑名錶示的文件或目錄的名稱。
 String getParent() 
          返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null
 File getParentFile() 
          返回此抽象路徑名父目錄的抽象路徑名;如果此路徑名沒有指定父目錄,則返回 null
 String getPath() 
          將此抽象路徑名轉換爲一個路徑名字符串。
 long getTotalSpace() 
          返回此抽象路徑名指定的分區大小。
 long getUsableSpace() 
          返回此抽象路徑名指定的分區上可用於此虛擬機的字節數。
 int hashCode() 
          計算此抽象路徑名的哈希碼。
 boolean isAbsolute() 
          測試此抽象路徑名是否爲絕對路徑名。
 boolean isDirectory() 
          測試此抽象路徑名錶示的文件是否是一個目錄。
 boolean isFile() 
          測試此抽象路徑名錶示的文件是否是一個標準文件。
 boolean isHidden() 
          測試此抽象路徑名指定的文件是否是一個隱藏文件。
 long lastModified() 
          返回此抽象路徑名錶示的文件最後一次被修改的時間。
 long length() 
          返回由此抽象路徑名錶示的文件的長度。
 String[]

list() 
          返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中的文件和目錄。

          遍歷一個目錄,只有名稱;

 String[]

list(FilenameFilter filter) 
          返回一個字符串數組,這些字符串指定此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。

自定義過濾器,實現FileFilter接口,則需要重寫抽象方法:

* listFiles()遍歷目錄的同時,獲取到了文件名全路徑,調用過濾器的方法accept,將獲取到的路徑傳遞給accept方法的參數pathname
        * accept方法接收了參數pathname,參數是listFiles傳遞來的
        * 在accept方法中,進行判斷,如果這個路徑是Java文件,返回true,走着返回false
        * 一旦方法返回了true
        * listFiles將路徑保存到File數組中

 File[]

listFiles() 
          返回一個抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中的文件。

          遍歷一個目錄,有完整路徑;

 File[]

listFiles(FileFilter filter) 
          返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。

 File[] listFiles(FilenameFilter filter) 
          返回抽象路徑名數組,這些路徑名錶示此抽象路徑名錶示的目錄中滿足指定過濾器的文件和目錄。
static File[] listRoots() 
          列出可用的文件系統根。
 boolean

mkdir() 
          創建此抽象路徑名指定的目錄。

 boolean

mkdirs() 
          創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。

          也可以創建單級文件夾,建議用此方法代替mkdir();

 boolean renameTo(File dest) 
          重新命名此抽象路徑名錶示的文件。
 boolean setExecutable(boolean executable) 
          設置此抽象路徑名所有者執行權限的一個便捷方法。
 boolean setExecutable(boolean executable, boolean ownerOnly) 
          設置此抽象路徑名的所有者或所有用戶的執行權限。
 boolean setLastModified(long time) 
          設置此抽象路徑名指定的文件或目錄的最後一次修改時間。
 boolean setReadable(boolean readable) 
          設置此抽象路徑名所有者讀權限的一個便捷方法。
 boolean setReadable(boolean readable, boolean ownerOnly) 
          設置此抽象路徑名的所有者或所有用戶的讀權限。
 boolean setReadOnly() 
          標記此抽象路徑名指定的文件或目錄,從而只能對其進行讀操作。
 boolean setWritable(boolean writable) 
          設置此抽象路徑名所有者寫權限的一個便捷方法。
 boolean setWritable(boolean writable, boolean ownerOnly) 
          設置此抽象路徑名的所有者或所有用戶的寫權限。
 String toString() 
          返回此抽象路徑名的路徑名字符串。
 URI toURI() 
          構造一個表示此抽象路徑名的 file: URI。
 URL toURL() 
          已過時。 此方法不會自動轉義 URL 中的非法字符。建議新的代碼使用以下方式將抽象路徑名轉換爲 URL:首先通過 toURI 方法將其轉換爲 URI,然後通過 URI.toURL 方法將 URI 裝換爲 URL。

1.4 遞歸

 *  方法的遞歸調用

             * 遞歸分爲兩種,直接遞歸和間接遞歸
             * 直接遞歸稱爲方法自身調用自己。間接遞歸可以A方法調用B方法,B方法調用C方法,C方法調用A方法
 *  方法自己調用自己
             *  適合於,方法中運算的主體不變,但是運行的時候,參與運行的方法參數會變化
             *  注意:
             *     遞歸一定要有出口, 必須可以讓程序停下
             *     遞歸次數不能過多
             *     構造方法,禁止遞歸

1.5 例題

遞歸遍歷全目錄,並輸出目錄下的.xlsx文件:


import java.io.File;

public class FullFilesListDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File file = new File("D:\\B11資料\\1. RMS 系統");
        printXLSX(file); 
    }
    public static void printXLSX(File file) {
        // TODO Auto-generated method stub
            File [] fileArr  = file.listFiles(new MyFliterXlsx());
            
            for (File file2 : fileArr) {
                //對f路徑,判斷是不是文件夾
                if(file2.isDirectory()){
                    //遞歸進入文件夾遍歷
                    printXLSX(file2);
                }else{
                    System.out.println(file2);
                }
            }      
     }

}

 

import java.io.File;

public class MyFliterXlsx implements FileFilter {
    public boolean accept(File pathname) {
        //判斷獲取的是目錄,直接返回true
        if(pathname.isDirectory())
            return true;
        return pathname.getName().toLowerCase().endsWith(".xlsx");
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章