关于文件的复制(用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 }
时间: 2024-10-23 06:40:13

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

OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制

字节流两套:         java.lang.Object--java.io.OutputStream--java.io.FileOutputStream         java.lang.Object--java.io.InputStream--java.io.FileInputStream ================================================================== 一.OutputStream 抽象类(java.io) 字节输出

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自

第四次作业:文件的复制速度

本次我们学习了如何用字节流进行文件的复制,但由于字节复制速度问题,不太适合复制除了文本文档的一些大文件.所以,本次作业,我们就来改进如何去提高文件复制的效率. Java实现文件拷贝其实质上就是使用java提供的三种文件流操作,字节流,字符流,二进制流. 字节流:FileInputStream 与 FileOutputStream,也就是老师上课所讲的内容,这个复制速度比较慢,字节流读取文件的单位为字节,对于英语字母(只占一个字节)不受任何影响,而对于中文文字在unicode编码为两个字节(或者以

02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

 模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStream; class MyBufferedInputStream{ private InputStream in; private byte[] buf = new byte[1024*4]; private int pos = 0,count = 0; MyBufferedInputStream(I

文件的复制

package struts; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class CopyFile { p

利用字节流和字节数组流是实现文件的复制

package ioxuexi; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;i

java——用递归和IO流来实现文件的复制

1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.Ou

java IO(二):字节流(InputStream和OutputStream)

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

02JavaIO详解_IOl流的三种分类以及InputStream和OutputStream

IO流指的就是输入流和输出流.怎么定义输入和输出流呢,以程序为参考,流入到程序里就是输入流,从程序里面流出去就是输出流. 输入/输出流的介绍: 流有三种分类: 1.  从功能上分为:输入流和输出流. 2.从流结构上分为:字节流和字符流. 3.节点流和过滤流. 说明:上面提到了字节流和字符流.其实字符流就是以字节流为基础的,我们操纵String更加方便啊,所以有了字符流.字节流掌握好以后,字符流就很简单了. 字符流和字节流的说明: 字节流的基础是InputStream和OutputStream.我