I/O流中的字符流的讀取與寫入
(主要用於讀取與寫入文檔文件,可以輕鬆讀取寫入中文)
爲何需要字符流:傳統的字節流是一個一個字節讀取與寫入的,而一個漢字是由3個字節組成的,當用長度爲3以上的數組時可以讀取與寫入中文字符,而字符流就可以解決字節流的這個弊端。
1.在Reader類中有個InputStreamReader的子類,這個類有個read(char[])的方法,可以把文件以字符的形式讀取數據,一箇中文就代表一個字符。
讀取字符流代碼示例:
public static void test1(){
char ch[]=new char[1024];
try{
InputStream is=new FileInputStream("src/b.txt");
Reader reader=new InputStreamReader(is);
int len=0;
//表示讀取數據的長度
while((len=reader.read(ch))!=-1){
System.out.println(ch);
//打印文件內容
}
reader.close();
is.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2.在Writer類中也有個OutputStreamWritert的子類,這個類中有個write()方法,這個方法帶的參數可以是String型,可以是int型,也可以是一個char[]數組,功能相對之前強大。
寫入字符流代碼示例:
public static void test2(){
try{
OutputStream os=new FileOutputStream("src/c.txt",true);
Writer writer=new OutPutStreamWriter(os);
writer.write("海賊王");
writer.flush();
writer.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3.在Reader類中還有個BufferedReader的子類,調用這個類比InputStreamReader的效率高一些,這個類有個readLine()方法,這個方法一次讀取一個文本行,當讀取的文件較大時效率相對比較高。
代碼示例:
public static void test3(){
try{
InputStream is=new FileInputStream("src/b.txt");
BufferedReader br=new BufferedReader(new
InputStreamReader(is));
while(br.ready()){
System.out.println(br.readLine());
//打印行數據
}
br.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
代碼示例:
public static void test4(){
try{
PrintWriter pw=new PrintWriter(new
FileOutputStream("src/b.txt",true));
pw.write("海賊王");
pw.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
}
代碼示例:
public static void test5(){
Scanner sc;
try {
sc = new Scanner(new FileInputStream("src/b.txt"));
while(sc.hasNextLine()){
System.out.println(sc.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
便的方法學起,無從對比,也就失去學習過程的趣味性與積極性。