黑马程序员-IO-BufferedReader,BufferedWriter

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
文件拷贝,从一个地方拷贝到另一个地方

有两种方式

1. 一个一个字符的拷贝。

2. 数组缓冲区拷贝。

package com.lxh.io;
import java.io.*;
public class CopyDemo {

	public static void main(String[] args) {
		CopyDemo c = new CopyDemo();
		c.copyByArray();
	}

	public void copyByChar() {

		FileWriter fw = null;
		FileReader fr = null;
		try {
			// 1.在目标地址创建目标文件
			fw = new FileWriter("FileWriterDemo_copy.txt");
			// 2.将被拷贝的文件放到流中
			fr = new FileReader("D:\\我的文档\\Workspaces\\MyEclipse 8.5\\JavaBasic\\src\\com\\lxh\\io\\FileWriterDemo.java");
			// 3.将流中的数据写到目标文件中。
			int i = 0 ;
			while((i = fr.read()) != -1) { // read返回0-65535
				fw.write(i);
			}
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public void copyByArray() {
		FileWriter fw = null;
		FileReader fr = null;
		try {
			// 1.在目标地址创建目标文件
			fw = new FileWriter("FileWriterDemo_copy2.txt");
			// 2.将被拷贝的文件放到流中
			fr = new FileReader("D:\\我的文档\\Workspaces\\MyEclipse 8.5\\JavaBasic\\src\\com\\lxh\\io\\FileWriterDemo.java");
			// 3.将流中的数据写到目标文件中。
			char[] buf = new char[1024];
			int len ;
			while((len = fr.read(buf)) != -1) { // read返回0-65535
				fw.write(buf, 0, len);
			}
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

BufferedWriter

单单使用FileWriter等写入流,读入一个字符,或字符串或字符数组,随即写入磁盘,效率将会比较底下。

BufferdWriter将会封装如FileWriterOutputStreamWriters。其封装了数组作为缓冲区。另外封装了换行的新行符为newLine()方法。实现跨平台的换行功能。

一般的开发中,都建议使用缓冲区的流。

构造方法:

import java.io.*;
public class BufferdWriterDemo {
	public static void main(String[] args) {
		FileWriter fw = null;
		BufferedWriter bufw = null;
		try {
			//1.先创建一个刘对象
			fw = new FileWriter("BufferdWriterDemo.txt");
			//2.使用缓冲区来封装流对象。
			bufw = new BufferedWriter(fw);
			//3.缓冲区实质是操作流对象读取数据的。
			bufw.write("起初,神创造天地!");
			//4.BufferedWriter提供newLine()方法换行。
			bufw.newLine();
			bufw.write("地是...");
			bufw.flush();
			
		} catch (IOException e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			//5.缓冲区实质是操作流对象,所以调用他的close()方法就能关闭其封装的Writer抽象类的子类的流对象了。
			try {
				bufw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
BufferedReader

提供了readLine()方法,可以一次读取一行,通过换行的字符’\n’或’\r’确定某一行的终止。返回类型为String。当到底流的末尾时,返回’null’。

import java.io.*;
public class BufferedReaderDemo {
	public static void main(String[] args) {
		FileReader fr = null;
		BufferedReader bufr = null;
		try {
			fr = new FileReader("BufferdWriterDemo.txt");
			bufr = new BufferedReader(fr);
			String str = null;
			while((str = bufr.readLine()) != null)
				// 此处则需要使用println方法了。
				System.out.println(str);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				bufr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
MyBufferedReader

BufferedReader能够达到缓冲效果,其原理在于使用了数组。其readLine()方法,是调用Readerread方法。将每一次read方法中返回的int类型转化成char类型存入StringBuilder中。每一行判断是否以’\r\n’结束。返回每一行的内容。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值