作业:将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 }
时间: 2024-10-23 06:40:13