Java IO操作——BufferedReader(缓冲区读取内容,避免中文乱码)

要点:

掌握BufferedReader类的使用

掌握键盘输入的基本形式


Buffer:表示缓冲区的。之前的StringBuffer,缓冲区中的内容可以更改,可以提高效率。

如果想接收任意长度的数据,而且避免乱码的产生,就可以使用BufferedReader。

public class BufferedReader extends Reader

因为输入的数据有可能出现中文,所以此处使用字符流完成

BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。

1、public BufferedReader(Reader in) 构造方法 接收一个Reader类的实例

2、public String readLine() throws IOException 一次性从缓冲区中将内容全部读取进来。

System.in本身表示的是InputStream(字节流),现在要求接收的是一个字符流,需要将字节流转为字符流才可以,InputStreamReader。

BufferedReader接收键盘输入时实例化如下:


此时就可以给出键盘输入数据的标准格式。

import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[]){
		BufferedReader buf = null ;		// 声明对象
		buf = new BufferedReader(new InputStreamReader(System.in)) ;	// 将字节流变为字符流
		String str = null ;	// 接收输入内容
		System.out.print("请输入内容:") ;
		try{
			str = buf.readLine() ;	// 读取一行数据
		}catch(IOException e){
			e.printStackTrace() ;	// 输出信息
		}
		System.out.println("输入的内容为:" + str) ;
	}
};

此时,没有任何长度限制,可以输入很多的内容,每次都以回车结束。

不仅可以接收键盘输入,还可以将文件中的内容读取到缓冲区之中 然后调用readLine()方法将缓冲区中的全部内容转为字符串。实例如下:

在d盘根目录下有一个test.txt文件内容如下:


代码读取如下:

import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[])throws IOException{
		BufferedReader buf = null ;		// 声明对象
		buf = new BufferedReader(new FileReader(new File("D:"+File.separator+"test.txt"))) ;	// 将字节流变为字符流
		String str = null ;	// 接收输入内容
		System.out.print("请输入内容:") ;
		try{
			str = buf.readLine() ;	// 读取一行数据
		}catch(IOException e){
			e.printStackTrace() ;	// 输出信息
		}
		System.out.println("输入的内容为:" + str) ;
	}
};

需要注意的是,如果从文件中读取的话readLine一次只能读取一行的数据。

编辑test.txt 如下所示:


import java.io.* ;
public class BufferedReaderDemo01{
	public static void main(String args[])throws IOException{
		BufferedReader buf = null ;		// 声明对象
		buf = new BufferedReader(new FileReader(new File("D:"+File.separator+"test.txt"))) ;	// 将字节流变为字符流
		String str1 = null ;	// 接收输入内容
		String str2 = null ;	// 接收输入内容
		try{
			str1 = buf.readLine() ;	// 读取一行数据
			str2 = buf.readLine() ;	// 读取一行数据
		}catch(IOException e){
			e.printStackTrace() ;	// 输出信息
		}
		System.out.println("读取第一行的内容为:" + str1) ;
		System.out.println("读取第二行的内容为:" + str2) ;
	}
};

可以发现:从文件中使用readLine()方法读取行内容时,会自动接着上次在流中的位置进行读取。

如果要全部读取文件的中的内容有如下两种方法:

方法一:使用StringBuffer类不停的连接readLine()从每次读取的一行内容,直至读取的为null为止。然后进行输出。

方法二:使用StringBuffer类不停的连接read()方法读取到的每一个数字转化后的字符。然后进行输出。

再次不在赘述。


个人感觉,还是先系统的了解一些各种类的作用,等到具体开发时再查看API文档,就能直接找到自己所需要类的方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值