JAVA自学教程之IO流(二):文件的复制 & 缓冲区1



JAVA自学教程之IO流(二):文件的复制 & 缓冲区1。

一、复制文本文件

将G盘的文本文件复制到D盘上

也就是 读取G盘中文本文件的数据,写入D盘中->连读带写

而剪切呢,就是连读带写后,删除原盘的文件

 

  1. <span style=”font-family:KaiTi_GB2312;font-size:18px;”><strong>import java.io.FileReader;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. public class Main
  5. {
  6.     public static void main(String[] args) throws IOException {
  7.         FileReader fr = null;
  8.         FileWriter fw  = null;
  9.         try {
  10.             fr = new FileReader(“G盘.txt”);
  11.             fw = new FileWriter(“D:\\ACM.txt”);
  12.             char[] ch = new char[1024];//缓存读取的数据
  13.             int t ;
  14.             while((t = fr.read(ch))!=-1){
  15.                 fw.write(ch,0,t);
  16.             }
  17.         } catch (Exception e) {
  18.             System.out.println(“读写失败”);
  19.         }finally{
  20.             if(fw!=null)
  21.             {
  22.                 try {
  23.                     fw.close();
  24.                 } catch (Exception e2) {
  25.                     throw new RuntimeException();
  26.                 }
  27.             }
  28.             if(fr!=null){
  29.                 try {
  30.                     fr.close();
  31.                 } catch (Exception e2) {
  32.                     throw new RuntimeException();
  33.                 }
  34.             }
  35.         }
  36.     }
  37. }</strong></span>


一个文件如果正在使用,是不能被删除的,所以注意要将这两个动作关联起来

 

 

二、字符流的缓冲区

实际上,上面的char[]数组就是一个缓冲区,缓冲区的出现提高了对数据的读取效率

BufferedWriter类、BufferedReader类

前提:缓冲区必须结合流才能使用

作用:在流的基础上对流的功能进行了增强

BufferWriter类演示

 

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。


可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

特有方法:newLine()

 

 

  1. <span style=”font-family:KaiTi_GB2312;font-size:18px;”>import java.io.BufferedWriter;
  2. import java.io.FileWriter;
  3. import java.io.IOException;
  4. public class Main
  5. {
  6.     public static void main(String[] args) throws IOException {
  7.         FileWriter fw = new FileWriter(“ACM.txt”);
  8.         //创建一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
  9.         BufferedWriter bw = new BufferedWriter(fw);
  10.         //使用缓冲去的方法,将数据写入到缓冲区中
  11.         bw.write(“ACM。。。。”);
  12.         bw.newLine();//实际上 System.getproperty(“line.separator”);
  13.         bw.write(“acm”);
  14.         //在用缓冲去的刷新方法,将数据写入目的地
  15.         bw.newLine();
  16.         bw.flush();
  17.         for(int i = 0;i<5;i++){
  18.             bw.write(“1111″);
  19.             bw.newLine();
  20.             bw.flush();
  21.         }
  22.         //关闭缓冲区,其实关闭的就是被缓冲的流对象fw
  23.         bw.close();
  24.     }
  25. }
  26. </span>

BufferedReader类演示

 

 

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

特有方法:readLine()

 

 

  1. <span style=”font-family:KaiTi_GB2312;font-size:18px;”><strong>import java.io.BufferedReader;
  2. import java.io.FileReader;
  3. import java.io.IOException;
  4. public class Main
  5. {
  6.     public static void main(String[] args) throws IOException {
  7.         FileReader fr = new FileReader(“ACM.txt”);
  8.         BufferedReader br = new BufferedReader(fr);
  9.         String str = null;
  10.         while((str = br.readLine())!= null){
  11.             System.out.println(str);
  12.         }
  13.         br.close();
  14.     }
  15. }
  16. </strong></span>


注意:

 

 

readLine()方法:使用了读取缓冲区的read方法,将读取到的字符进行缓冲并判断换行标记,将标记前的缓冲数据变成字符串并返回