Java IO File類


Java I/O系統

File類

  File類的直接父類是Object類。

  一個File類的對象,表示了磁盤上的文件或目錄。

  File類提供了與平台無關的方法來對磁盤上的文件或目錄進行操作。因為不同的系統平台對文件路徑的描述不盡相同,所以為了做到平台無關,在Java語言中,使用抽象路徑等概念。Java自動進行不同系統平台的文件路徑描述與抽象文件路徑之間的轉換。

  File類直接處理文件和文件系統。

  File類沒有指定信息怎樣從文件讀取或向文件存儲。

  File類描述了文件本身的屬性。(讀寫屬性等)。

  File對象用來獲取或處理與磁盤文件相關的信息,例如權限,時間,日期和目錄路徑。

  File類還可以瀏覽子目錄層次結構。

 

File類的構造函數

  File類有四個構造函數:

  File(String pathname)

  File(File parent, String child)

  File(String parent, String child)

  File(URI uri)

  利用構造方法,指定路徑名、文件名等來構造File類的對象,之后調用該對象的createNewFile()方法就可以創建出相應的文件。

  parent指定路徑(父目錄),可以是File類對象也可以是字符串,child中也可以加入路徑層級,但要注意,所用的路徑必須存在,不存在的路徑不會新建。

 

  關於斜杠和反斜杠,只能如下生硬地先記住吧:

  \\:右手用兩個,比如new File("D:\\abc\\" + "Test.txt");

  /:左手用一個。比如new File("D:/abc/" + "Test.txt");

  

 

  一個File類對象既可以表示目錄也可以表示文件。

  有兩個函數用於判斷File類的對象到底表示什么:

  public boolean isDirectory()

  public boolean isFile()

  它們的名稱和返回值都很顯然,就不多做解釋了。

 

目錄管理

  目錄操作的主要方法為:

  public boolean mkdir()

  public boolean mkdirs()

  根據抽象路徑名創建目錄。它們倆的區別下面會做解釋。

  public String[] list()

  返回抽象路徑名表示目錄下的文件名和目錄名。

  public File[] listFiles()

  返回抽象路徑名下的所有文件。與list()方法的不同之處在於一個返回的是字符串,另一個返回的是File類對象

 

  前面提到File類對象既可以是文件也可以是目錄,創建文件是createNewFile()方法,相對應的,創建目錄即調用mkdir()方法。

  注意mkdir()方法使用時只能新建一個文件夾,如下程序:

public class FileTest2
{
      public static void main(String[] args)
      {
             File file = new File("D:/abc/xyz/hello");

             file.mkdir();
      }
}

 

  假設D盤下abc目錄已經存在,但xyz目錄不存在,則不能成功創建hello目錄。

  要用mkdir()創建目錄,必須上一級目錄存在,即最底層目錄前面的目錄全都存在。

  要想把File對象包含的目錄一次性全都創建好,可以使用mkdirs()方法。

  如果目錄已經存在,不用創建,則返回false。

  注意mkdirs()方法即便返回false,也可能新創建了一些必要的父目錄。

 

文件管理

  在進行文件操作時,常需要知道一個關於文件的信息。

  Java的File類提供了方法來操縱文件和獲得一個文件的信息。如getName()返回文件名,getParent()返回父目錄名,exists()測試文件或目錄是否存在。

  然而,File類是不對稱的,說它不對稱,意思是雖然存在允許驗證一個簡單文件對象屬性的很多方法,但是沒有響應的方法來修改這些屬性,即有get無set。

  另外,File類還可以對目錄和文件進行刪除、屬性修改等工作。方法名都比較直觀,在此不多做介紹了。

 

使用FilenameFilter

  希望能夠限制由list()方法返回的文件,使它僅返回那些與一定的文件名方式或者過濾器(filter)相匹配的文件。

  為達到這樣的目的,必須使用list()方法的帶參數的重載形式:

  public String[] list(FilenameFilter filter)

  在該形式中,filter是一個實現了FilenameFilter接口的類的對象。

  該接口中有一個accept()方法,只有該方法判斷為true的文件名會被list方法返回。所以可以在accept方法中設置篩選規則。(這里使用了策略模式,可以回想一下Java集合中的比較器)。

  在此直接放出程序實例,來查看指定目錄下的文件:

文件名顯示程序
import java.io.File;
import java.io.FilenameFilter;

public class FileTest4
{

    public static void main(String[] args)
    {
        File file = new File("D:/abc");
        String[] names = file.list();

        // 列出所有文件及路徑
        for (String name : names)
        {
            System.out.println(name);
        }
        System.out.println("-----------------------");
        System.out.println("-------所有文件名為.java結尾的文件-----------");
        // 選擇.java結尾的文件
        for (String name : names)
        {
            if (name.endsWith(".java"))
            {
                System.out.println(name);
            }
        }

        // 使用文件過濾器
        String[] selectedNames = file.list(new FilenameFilter()
        {
            // 匿名內部類實現了FilenameFilter接口

            // 實現接口中的方法

            @Override
            public boolean accept(File dir, String name)
            {
                if (name.endsWith(".java")) { return true; }
                return false;
            }
        });
        // 只有accept返回true的文件名會被返回到selectedNames數組中

        System.out.println("-----------------------");
        System.out.println("-------所有文件名為.java結尾的文件-----------");
        for (String name : selectedNames)
        {
            System.out.println(name);
        }

    }
}

 

 

參考資料

  張龍老師Java SE系列視頻教程。

  File類官方文檔:

  http://docs.oracle.com/javase/7/docs/api/java/io/File.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM