首页 > 代码库 > 关于文件的复制(用InputStream和OutputStream)

关于文件的复制(用InputStream和OutputStream)

作业:将c盘的一个文本文件复制到d盘。

分析:复制原理:读取c盘文件中的数据,将这些数据写入到d盘当中,连读带写。

/*

 * 需求:作业:将c盘的一个文本文件复制到d盘。

 * 思路:

 * 1,需要读取源,

 * 2,将读到的源数据写入到目的地。

 * 3,既然是操作文本数据,使用字符流。

 */

第一种方式:

 1 public class CopyTextTest { 2     public static void main(String[] args) throws IOException { 3         //1,读取一个已有的文本文件,使用字符读取流和文件相关联。 4         FileReader fr = new FileReader("IO流_2.txt"); 5         //2,创建一个目的,用于存储读到数据。 6         FileWriter fw = new FileWriter("copytext_1.txt"); 7         //3,频繁的读写操作。 8         int ch = 0; 9         while((ch=fr.read())!=-1){10             fw.write(ch);11         }12         //4,关闭流资源。 13         fw.close();14         fr.close();15     }16 }

第二种方式:(循环次数少,效率高。)

 1 public class CopyTextTest_2 { 2     private static final int BUFFER_SIZE = 1024; 3     public static void main(String[] args) { 4         FileReader fr = null; 5         FileWriter fw = null; 6         try { 7             fr = new FileReader("IO流_2.txt"); 8             fw = new FileWriter("copytest_2.txt"); 9             //创建一个临时容器,用于缓存读取到的字符。10             char[] buf = new char[BUFFER_SIZE];//这就是缓冲区。 11             //定义一个变量记录读取到的字符数,(其实就是往数组里装的字符个数)12             int len = 0;13             while((len=fr.read(buf))!=-1){14                 fw.write(buf, 0, len);15             }16         } catch (Exception e) {17 //            System.out.println("读写失败");18             throw new RuntimeException("读写失败");19         }finally{20             if(fw!=null)21                 try {22                     fw.close();23                 } catch (IOException e) {24                     25                     e.printStackTrace();26                 }27             if(fr!=null)28                 try {29                     fr.close();30                 } catch (IOException e) {31                     32                     e.printStackTrace();33                 }34         }35     }36 }

原理图:

有缓冲区可以提高效率。

java中把缓冲区封装了。

缓冲区的出现提高了文件的读写效率。

 

关闭缓冲区就是关闭的被缓冲的流对象!

所以只需要关闭缓冲区就可以,不必要再关闭流了。

复制文件用缓冲区的方式.

 1 public class CopyTextByBufTest { 2     public static void main(String[] args) throws IOException { 3         FileReader fr = new FileReader("buf.txt");         4         BufferedReader bufr = new BufferedReader(fr); 5          6         FileWriter fw = new FileWriter("buf_copy.txt"); 7         BufferedWriter bufw = new BufferedWriter(fw); 8          9         String line = null;10         while((line=bufr.readLine())!=null){11             bufw.write(line);12             bufw.newLine();13             bufw.flush();14         }15         /*16         int ch = 0;17         while((ch=bufr.read())!=-1){18             bufw.write(ch);19         }20         */21         bufw.close();22         bufr.close();23     }24 }

 

关于文件的复制(用InputStream和OutputStream)