[Java] Java IO Files

來源:互聯網
上載者:User

標籤:tput   文本   read   檔案系統   []   and   ade   方法   子類   

 

Files

使用 FileInputStream 或 FileReader 可以用於讀入檔案,前者基於二進位,後者基於文本。使用它們不需要讀取整個檔案,但是只能按照它們儲存的順序,依次讀取位元組,或字元。

使用 FileOutputStream 或 FileWriter 可以把資料寫出到檔案,按照資料被寫入的順序,依次儲存資料。

RandomAccessFile 可以在檔案中跳轉,讀入資料,或者寫出資料到檔案。Random Access 並不意味著你真的從隨意的位置讀入資料,或者把資料寫入到隨意位置。而是意味著你可以在檔案中跳躍,然後在停留的位置讀入資料,並且寫出資料。寫出資料時,是覆蓋原來的資料,不會是資料。

File 類用於擷取檔案大小,屬性,不能用於擷取檔案內容。

 

File 類

Java IO API 中的 File 類可以訪問底層檔案系統,擷取檔案的資訊元,即擷取用於描述檔案的資訊,例如檔案大小,屬性等。如果需要訪問檔案內容,需要使用 FileInputStream, FileOutpuStream, RandamAccessFile。在 Java NIO 中,則使用 java.nio.FileChannel 讀入檔案內容。

建立檔案對象的執行個體

        File file = new File("/tmp/tony/a.txt");

檢查檔案是否存在

在建立 File 對象時,即使檔案不存在,構造器也不會報錯。

        File file = new File("/tmp/tony/a.txt");        boolean isFileExist = file.exists();

建立目錄

mkdirs() 方法可以建立 File 路徑上面沒有的全部檔案夾。 下面例子中,如果 resources 以及之前的目錄已存在,而 aaa 和 bbb 兩層目錄不存在,mkdirs() 會建立 aaa/ 以及其子目錄 bbb/。

        File folder = new File("/tmp/tony/aaa/bbb/");        boolean isSuccess = folder.mkdirs();

 mkdir() 方法只會最裡面的那個目錄。上面例子如果使用 mkdir() ,bbb 不會被建立,因為沒有 aaa 目錄,返回 false.

檔案大小

        File file = new File("/tmp/tony/a.txt");        long size = file.length();

移動檔案、改名

修改檔案名稱字,移動檔案位置,都是用 renameTo() 方法,和 Linux 中的 mv 命令相似。

        File file = new File("/tmp/tony/a.txt");                boolean isSuccess = file.renameTo(new File("/tmp/tony/aaa/xx.txt"));

刪除檔案

        File file = new File("/tmp/tony/a.txt");                file.delete();

列舉目錄下的檔案

list() 方法獲得目錄下的全部檔案名稱, listFiles() 方法獲得目錄下的全部檔案,以 File 對象的形式存在。

        File file = new File("/tmp/tony/a.txt");                String[] subfileNames = file.list();        File[] subFiles = file.listFiles();

 

FileInputStream 和 FileOutputStreamFileInputStream

FileInputStream 按照 stream 的方式,基於位元組,讀取檔案的內容。FileInputStream 是 InputSteam 的子類。

            InputStream is = new FileInputStream("/tmp/tony/a.txt");            int data = is.read();            while(data != -1){                System.out.print((char)data);                data = is.read();                }            is.close();

FileInputStream 的構造器有:

a. 接收一個 String 類型

            String filePath = "/tmp/tony/a.txt";            InputStream is = new FileInputStream(filePath);

b. 接收一個 File 對象為參數

            File file = new File("/tmp/tony/a.txt");            InputStream is = new FileInputStream(file);    

read() 方法,一次讀取一個位元組,並返回該位元組對應的 int 值

read(byte[]) 一次讀取一個位元組數組

close() 關閉 stream

 

FileOutputStream

寫出資料到檔案

            OutputStream os = new FileOutputStream("/tmp/tony/b.txt");            os.write("abcd\n".getBytes());

FileOutputStream 構造器

a. 接收一個參數, String 類型

            OutputStream os = new FileOutputStream("/tmp/tony/a.txt");

b. 接收一個參數,File 類型

            File file = new File("/tmp/tony/b.txt");            OutputStream os1 = new FileOutputStream(file);

c. 接收兩個參數。第一個參數用於定位檔案,String 或 File 類型;第二個參數表示,在寫出資料到檔案時,追加還是覆蓋 File 檔案原有的內容。

            OutputStream os1 = new FileOutputStream("/tmp/tony/a.txt", true);    // append content            OutputStream os2 = new FileOutputStream("/tmp/tony/a.txt", false);    // overwrite content

wirte() 一次寫出一個位元組

write(byte[]) 一次寫出一個位元組數組

flush() 清刷寫到 FileOutputStream 的緩衝區的資料到硬碟上。

 

RandomAccessFile

RandomAccessFile 可以跳到檔案中的某個位置,開始讀入和寫出資料。寫出資料時,會覆蓋掉檔案在該位置原有的內容,這是 FileInputStream 和 FileOutputStream 無法實現的。

 

FileReader 和 FileWriterFileReader

FileReader 按照 stream 的方式,基於字元,讀取檔案的內容,和 FileInputStream 相似。區別在於 FileInputStream 基於 byte , 而 FileReader 基於字元。

            Reader reader = new FileReader("/tmp/tony/a.txt");            int data = reader.read();                        while(data != -1){                System.out.print((char)data);                data = reader.read();            }            reader.close

字元集編碼

FileReader 使用應用所在環境的編碼集,對讀入的資料進行解碼。如果寫出檔案的編碼集和讀入檔案時的編碼集不一樣,就會導致亂碼。這時需要制定字元集,不是用 FileReader ,而是用基於 FileInputStream 的 InputStreamReader 。

            InputStream is = new FileInputStream("/tmp/tony/b.txt");            Reader reader = new InputStreamReader(is, "UTF-8");            int data = reader.read();            while(data != -1){                System.out.print((char)data);                data = reader.read();            }            reader.close();

 

FileWriter

FileWriter 按照 stream 的方式,基於字元,把資料寫出到檔案中,和 FileOutputStream 相似。區別在於 FileOutputSteam 基於 byte, 而 FileWriter 基於字元。

            Writer writer = new FileWriter("/tmp/tony/c.txt");            writer.write("aaabbb\n");            writer.close();

兩個參數的構造器,第一個參數用於定位檔案,第二參數表示在寫出資料到檔案時,是追加還是覆蓋檔案中原有的內容。

Writer writer1 = new FileWriter("/tmp/tony/a.txt", true);  //appends to fileWriter writer2 = new FileWriter("/tmp/tony/a.txt", false); //overwrites file

FileWriter 在寫出資料時,無法指定特定的字元編碼集。如果需要指定編碼集,則不用用 FileWriter ,而是用基於 FileOutputStream 的 OutputSteamWriter。

            os = new FileOutputStream("/tmp/tony/d.txt");            Writer wt = new OutputStreamWriter(os, "UTF-8");            wt.write("aaa\n你好");            wt.close();

 

參考資料

Java IO Tutorial, jenkov

 

[Java] Java IO Files

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.