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

来源:互联网 发布:网络教育课程 编辑:程序博客网 时间:2024/05/16 06:57

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 blocke.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()方法进行了扩展


0 0