[重學Java基礎][Java IO流][Part.3]文件字符輸入輸出流

[重學Java基礎][JavaIO流][Part.3]文件字符輸入輸出流

FileReader

概述

可以直接讀入文件中字符內容的輸入流 繼承了InputStreamReader 是InputStreamReader 的一個包裝流 功能基本是基於InputStreamReader 來實現

官方註釋

/*
用於讀取文件字符內容的快捷類,該類假定默認的字符編碼和字符緩衝大小都是合適的。如果要自主指定這些設置的大小,構造一個基於FileInputStream的適配器InputStreamReader
FileReader用於讀取字符流文件,如果要讀取字節流 請使用FileInputStream
*/

源碼分析

這裏寫圖片描述

成員方法

可以看到此類的內容比較簡略 僅有三個重載的構造方法 入參分別是一個文件名 一個文件對象 一個文件描述符對象

public FileReader(String fileName) throws FileNotFoundException {
    super(new FileInputStream(fileName));
}

public FileReader(File file) throws FileNotFoundException {
    super(new FileInputStream(file));
}


public FileReader(FileDescriptor fd) {
    super(new FileInputStream(fd));
}

代碼示例

讀入字符文件流

  FileReader fr=new FileReader("d://a.txt");

    int i=0;
    while((i=fr.read())!=-1)
    {
        System.out.print((char)i);
    }
    fr.close();

輸出結果

第一行 四月是你的謊言
第二行 比宇宙更遠的地方
第三行 不死者之王
第四行 關於我的女友是個一本正經的碧池這件事

接受到換行符 即跳過三個字符

    FileReader fr=new FileReader("d://a.txt");

    int i=0;
    while((i=fr.read())!=-1)
    {
        if((char)i=='\n')
        {
            fr.skip(3);
        }
        System.out.print((char)i);
    }
    fr.close();

輸出結果

第一行 四月是你的謊言
 比宇宙更遠的地方
 不死者之王
 關於我的女友是個一本正經的碧池這件事

FileReader類本身 並無此方法 它的讀入 跳過 等方法 完全是繼承自其父類的

FileWriter

概述

可以直接向文件中寫入字符內容的輸出流 繼承了InputStreamWriter 是InputStreamWriter 的一個包裝流 功能基本是基於InputStreamWriter 來實現

官方註釋

/*
用於向寫入文件字符內容的快捷類 該類假定默認的字符編碼和字符緩衝大小都是合適的。
如果要自主設置指定這些設置的大小,請使用基於FileOutoutStream的適配器OutputStreamWriter

一個文件是否有效或者能否被創建取決於底層系統 尤其是一些底層系統,只允許一個文件在同一時間只能被一個FileWriter(或其他寫入類)以寫入方式打開
在一些情況下,當指定文件已經被打開後 再創建FileWriter對象時 該類中的構造函數會執行失敗
FileWriter表示一個字符輸出流
如需要原始字節輸出流,請使用FileOutputStream
*/

源碼分析

這裏寫圖片描述

成員方法

和FileReader類似 此類的內容也比較簡略 有三個類似的重載構造方法 入參分別是一個文件名 一個文件對象 一個文件描述符對象 其大部分應用方法也是使用繼承自父類的方法
之外另增加了兩個是否允許追加輸入的構造方法 (這兩個方法都是java8 加入的)
入參多了是否允許追加輸入的boolean參數
可以看到所有方法都是封裝的對應FileOutputStream方法

public FileWriter(String fileName) throws IOException {
    super(new FileOutputStream(fileName));
}

boolean append參數 是否允許追加輸入 如果爲true 
則繼續輸入會追加到文件內容的尾部而不是從內容頭部開始重寫
public FileWriter(String fileName, boolean append) throws IOException {
    super(new FileOutputStream(fileName, append));
}

public FileWriter(File file) throws IOException {
    super(new FileOutputStream(file));
}

boolean append參數 是否允許追加輸入 如果爲true 
則繼續輸入會追加到文件內容的尾部而不是從內容頭部開始重寫
public FileWriter(File file, boolean append) throws IOException {
    super(new FileOutputStream(file, append));
}

public FileWriter(FileDescriptor fd) {
    super(new FileOutputStream(fd));
}

代碼示例

寫入到文件中

   FileWriter fileWriter=new FileWriter("d:\\2017.txt");
   List<String> list= Arrays.asList("歡迎來到實力至上主義的教室","情色漫畫老師","幹物妹!小埋R","小林家的龍女僕");
    for (String s : list) {
        fileWriter.write(s+"\r\n");
    }
    fileWriter.flush();

注意 windows下寫入 換行符爲 ‘\r\n’
如果要程序能在不同操作系統運行,
可以寫成

fileWriter.write(System.getProperty("line.separator"));

輸出結果

歡迎來到實力至上主義的教室
情色漫畫老師
幹物妹!小埋R
小林家的龍女僕
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章