[重學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
小林家的龍女僕