天天看點

使用FileReader和FileWriter讀取寫入檔案内容

使用FileReader和FileWriter讀取寫入檔案内容

java 中的位元組流不能直接操作Unicode字元,要想直接操作字元輸入/輸出要使用幾個字元輸入/輸出類。

字元流層次結構的頂層是Reader和Writer抽象類。

1、Reader

Reader是定義java的流式字元輸入模式的抽象類。錯誤異常為IOException。

主要方法有:

abstract void close() 關閉輸入流,關閉後讀取将會産生IOException異常。

void mark(int numChars) 在輸入流的目前位置設立一個标志。該輸入流在numChars個字元被讀取前有效。

boolean markSupported() 該流支援mark()/reset()則傳回true。

int read() 如果調用的輸入流的下一個字元可讀則傳回一個整型,檔案尾傳回-1。

int read(char buffer[ ]) 試圖讀取buffe中的buffer.length個字元,傳回實際成功讀取的字元數,檔案尾傳回-1。

abstract int read (char buffer[ ], int offset, int numChars) 試圖讀取buffer中從buffer[offset]開始的 numChars個字元,傳回實際成功讀取的字元數,檔案尾傳回-1。

void reset() 設定輸入指針到先前設立的标志處。

long skip (long numChars) 跳過numChars 個輸入字元,傳回跳過的字元數。

2、writer

writer 是定義流矢字元輸出的抽象類。所有該類的方法都傳回一個void值并在出錯條件下引發一個IOException異常。

主要方法:

abstract void close() 關閉輸出流,關閉後的寫操作引發IOException異常。

abstract void flush(0 定制輸出狀态以使每個緩沖器都被清除。也就是重新整理緩沖。

void write(int ch) 向輸出流寫入單個字元。參數是一個整型,可以不必把參數轉換成字元型就可以調用。

void write (char buffer[ ]) 向一個輸出流寫入一個完整的字元數組。

abstract void write (char buffer[ ], int offset ,int numChars) 向調用的輸出流寫入數組buffer 以buffer[offset]為起點的numChars個字元區域内的内容。

void write(String str) 向調用的輸出流寫str。

void write (String str, int offset, int numChars) 寫數組str中以制定的offset為起點的長度為numChars個字元區域内的内容。

3、FileReader

FileReader類建立了一個可以讀取檔案内容的Reader類。它的構造函數:

FileReader (String filePath) filePath 是一個檔案的完整路徑

FileReader(File fileObj) fileObj 是描述該檔案的File對象

均引發FileNotFoundException異常。

例如,從一個檔案逐行讀取并把它輸出到标準輸入流。

import java.io.*;

class FileReaderDemo {

public static void main (String args[ ] ) throws Exception {

FileReader fr = new FileReader ("c://in.txt");

BufferedReader br = new BufferedReader (fr);

String s;

while ((s = br.readLine() )!=null) {

System.out.prinln (s);

}

fr.close();

}

}

4、FileWriter

FileWriter 建立一個可以寫檔案的Writer類。構造函數:

FileWriter (String filePath) filePath 是一個檔案的完整路徑

FileWriter(String filePath, boolean append) 如果append為true ,輸出是附加到檔案尾的。

FileWriter(File fileObj) 是描述該檔案的File對象

例如,建立了一個樣本字元緩沖器,開始生成一個String,然後用getChars()方法提取字元數組。然後建立了 三個檔案,file1.txt包含例子中的隔個字元,file2.txt包含所有的字元,file2.txt包含最後的四分之一。

import java.io.*;

class FileWriterDemo {

public static void main (String args[ ]) throws Exception {

String source = "learn how to write to file";

FileWriter f1 = new FileWriter("file1.txt");

for (int i=0; i<buffer.length; i +=2) {

f1.write (buffer[i]);

}

fo.close();

FileWriter f2 = new FileWriter("file2.txt");

f2.write(buffer);

f2.close();

FileWriter f3 = new FileWriter ("file3.txt");

f2.write(buffer,buffer.length-buffer.length/4, buffer.length/4);

}

}

==================================

try{

BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

String inputLine=input.readline();

int i=Integer.parseInt(inputLine).intValue();

}

catch(Exception e){

e.printStackTrace() ;

}

InputStream 是位元組流

reader是字元流

INPUTSTREAMREADER 是将位元組流轉換成字元流,是上面兩者的轉換類。

比如輸入時inputStram,可以用inputStreamReader(inputStream);傳回reader的字元流

java輸入輸出流,使用了裝飾模式

inputstream是最原始的,專注了核心功能

而inputstreamreader是核心功能的裝飾,提供了更封裝的方法

inputstream隻能讀位元組,byte數組,而有reader的可以讀char

如果在reader上再裝飾一層buffered,那麼就可以讀取 string

方法是 readline();