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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值