首页 > 学院 > 开发设计 > 正文

简单的I/O流的读取与写入(下)

2019-11-11 01:32:47
字体:
来源:转载
供稿:网友

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

回顾下来,我们的代码越来越简洁,效率也有所提高。在学习的过程中,我们需要不断优化我们的方法,使我们的代码更具高效性,安全性,复用性和健壮性,这也是我们不断学习新方法的原因,如果一开始就从最优化,最简便的方法学起,无从对比,也就失去学习过程的趣味性与积极性。


上一篇:equals()

下一篇:关键字const的使用总结

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表