簡單的I/O流的讀取與寫入(下)

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();
	}
}


4.同樣,Writer類中還有個PrintWriter的子類,調用這個類比OutputStreamWriter更容易使用,這個類有print()方法,這個方法可以帶多種數據類型,char、boolean、double、float、String等,而且容易調用。
代碼示例:
public static void test4(){
	try{
		PrintWriter pw=new PrintWriter(new 

FileOutputStream("src/b.txt",true));
		pw.write("海賊王");
		pw.close();
	}catch (FileNotFoundException e) {
		e.printStackTrace();
	}
}


5.再來一個Scanner類,Scanner()可以傳入一個輸入流,還可以設置編碼格式,而這也是比輸入流的讀取要好的一點,調用也比輸入流的讀取簡單。
代碼示例:
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();
	}
}


回顧下來,我們的代碼越來越簡潔,效率也有所提高。在學習的過程中,我們需要不斷優化我們的方法,使我們的代碼更具高效性,安全性,複用性和健壯性,這也是我們不斷學習新方法的原因,如果一開始就從最優化,最簡
便的方法學起,無從對比,也就失去學習過程的趣味性與積極性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章