黑马程序员_IO流学习第一天

IO流全称为Input、Output流(输入输出流)

流按操作数据分为两种:字节流和字符流

字节流的抽象基类:InputStream、OutputStream

字符流的抽象基类:Reader、Writer

缓冲区BufferedWriter、BufferedReader

其中BufferedWriter有一个方法 newLine() 是换行的意思。与\n换行符不同的是。newLine()方法是跨平台的。而\n换行符只能是Windows系统上有效。在linux系统无效。

而BufferedReader有一个方法readLine()在读取文本文件时,读取一行文本数据。返回String(读取的该行的文本,不包含行终止符)或NULL(说明已经读取到文本结尾)

使用缓冲区对象进行复制文件,如下


public class BufferedCopyTest {

	public static void main(String[] args) {
		
		File srcfile = new File("d:\\fengjd\\temp\\writer.txt");
		File targetFile = new File("d:\\fengjd\\temp\\taget.txt");
		FileReader fr = null;
		FileWriter fw = null;
		// 缓冲区
		BufferedWriter bw = null;
		BufferedReader br = null;
		try {
			fr = new FileReader(srcfile);
			fw = new FileWriter(targetFile);
			// 用流对象来构造一个缓冲区对象
			bw = new BufferedWriter(fw);
			br = new BufferedReader(fr);
			String tempStr = "";
			while((tempStr = br.readLine()) != null){
				bw.write(tempStr);
				bw.newLine();
				bw.flush();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(bw!=null){
				try {
					//  关闭缓冲区方法,实际上关闭的是缓冲区中的流对象
					bw.close();
				} catch (IOException e) {
					System.out.println("写入出异常了..");
					e.printStackTrace();
				}
			}
			if(br!=null){
				try {
					br.close();
				} catch (IOException e) {
					System.out.println("读取出异常了..");
					e.printStackTrace();
				}
			}
			
		}
	}

}


       总结:使用缓冲区件和不使用缓冲区复制文本文件的区别

在读取文本时,FileReader的read()方法和BufferedReader的readLine()方法返回的类型不一致

FileReader的read()方法:其实读取文本的时候是一个字符一个字符的读取,并且每读取一个字符,就返回, 如果使用read(char[] temp)方法则是一个读取满一个缓存数组就返回,两个read()方法都是返回读取的个数;此时返回的int类型对应0 到 65535 之间,可转成字符。

而BufferedReader的readLine()方法:读取文本文件时每次读取是读取一行的数据。那么它内部是如何实现的呢?其实在文本文件中,比如a.txt 里面有一行abc123,但存在电脑的硬盘的形式是:abc123\r\n  ,但我们无法看到\r\n字符,此是换行符。方法内部实现是每当读取到\r\n就算读取了一行文本,此时返回读取的abc123数据(不包括 \r\n)。

总结:其实readLine() 是在read()方法进行了扩展


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值