国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-10 22:53:09
字體:
供稿:網(wǎng)友

I/O流中的字符流的讀取與寫入

(主要用于讀取與寫入文檔文件,可以輕松讀取寫入中文)

為何需要字符流:傳統(tǒng)的字節(jié)流是一個一個字節(jié)讀取與寫入的,而一個漢字是由3個字節(jié)組成的,當(dāng)用長度為3以上的數(shù)組時可以讀取與寫入中文字符,而字符流就可以解決字節(jié)流的這個弊端。1.在Reader類中有個InputStreamReader的子類,這個類有個read(char[])的方法,可以把文件以字符的形式讀取數(shù)據(jù),一個中文就代表一個字符。

讀取字符流代碼示例:

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;		//表示讀取數(shù)據(jù)的長度		while((len=reader.read(ch))!=-1){			System.out.PRintln(ch);			//打印文件內(nèi)容		}		reader.close();		is.close();	}catch (FileNotFoundException e) {		e.printStackTrace();	} catch (IOException e) {		e.printStackTrace();	}}

2.在Writer類中也有個OutputStreamWritert的子類,這個類中有個write()方法,這個方法帶的參數(shù)可以是String型,可以是int型,也可以是一個char[]數(shù)組,功能相對之前強(qiáng)大。寫入字符流代碼示例:

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的子類,調(diào)用這個類比InputStreamReader的效率高一些,這個類有個readLine()方法,這個方法一次讀取一個文本行,當(dāng)讀取的文件較大時效率相對比較高。代碼示例:

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());			//打印行數(shù)據(jù)		}		br.close();		}catch (FileNotFoundException e) {		e.printStackTrace();	} catch (IOException e) {		e.printStackTrace();	}}

4.同樣,Writer類中還有個PrintWriter的子類,調(diào)用這個類比OutputStreamWriter更容易使用,這個類有print()方法,這個方法可以帶多種數(shù)據(jù)類型,char、boolean、double、float、String等,而且容易調(diào)用。代碼示例:
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()可以傳入一個輸入流,還可以設(shè)置編碼格式,而這也是比輸入流的讀取要好的一點,調(diào)用也比輸入流的讀取簡單。代碼示例:
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();	}}

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普陀区| 嘉祥县| 阿巴嘎旗| 龙海市| 沙河市| 盱眙县| 贵南县| 盱眙县| 青海省| 瑞丽市| 天镇县| 永嘉县| 喜德县| 黑水县| 阳城县| 科尔| 邻水| 濮阳县| 金寨县| 新乐市| 望谟县| 江都市| 鹰潭市| 疏勒县| 孝昌县| 兰州市| 绥化市| 靖边县| 梅河口市| 柘城县| 博白县| 云南省| 临夏市| 交城县| 鄂温| 皮山县| 拉萨市| 崇文区| 当阳市| 绥江县| 仪陇县|