使用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();