用IO流实现文件复制功能

来源:互联网 发布:如何下载安全软件 编辑:程序博客网 时间:2024/05/16 05:29

1、计算机复制文件的原理?

  原理:计算机中的文件都是以字节为单位的,当复制文件时,首先读取待复制文件,然后将读取到的信息写入到目的文件中去。

  方式:IO流中复制文件提供两种方式,字节流和字符流。

  (1)字节流输入输出功能:InputStream(输入,用于读取);和OutputStream(输出,用于写出)。主要用来处理字节或二进制流对象(图片、音频、视频等)。

  (2)字符流输入输出功能:Reader(输入,用于读取)和 Writer(输出,用于写出)。主要用来处理单元为2个字节的Unicode字符或字符串,适用于中文文本操作。

  读写流量:可以选择每次读写一个字符、一个字符数组、一个字节、一个字节数组四种方式。

  注意:计算机中所有文件都是以字节为单位的储存,即使用字符流操作,在磁盘上保留的也不是文件的字符而是先把字符解析成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是将相邻的两个字节组成一个字符来读取的。

     字节流是通用的流,可用于任何类型的对象,包括二进制流对象,而字符流只能处理字符或者字符串。

2、用IO流实现文件复制功能。

  需求:将项目路径(相对路径)下的FAITH.java文件复制到d盘下,目的文件取名Copy.java。

  分析:这是对文本的操作,使用字符流来进行操作。

  读取数据:FAITH.java,使用 FileReader 。

  写入数据:d:\\Copy.java,使用 FileWriter 。

代码实现:  

  (1)每次读一个字符: 

public class CopyFile {public static void main(String[] args) throws IOException {// 封装数据源FileReader fr = new FileReader("FAITH.java");// 封装目的地FileWriter fw = new FileWriter("d:\\Copy.java");// 读取数据,每次读一个字符 int ch = 0; while ((ch = fr.read()) != -1) { fw.write(ch); }// 释放资源,关闭遵循就近原则,fw最近,先关fwfw.close();fr.close();}}
  (2)每次读一个字符数组:
public class CopyFile {public static void main(String[] args) throws IOException {// 封装数据源FileReader fr = new FileReader("FileWriterDemo.java");// 封装目的地FileWriter fw = new FileWriter("d:\\Copy.java");//每次读一个字符数组char[] chs = new char[1024]; int len = 0;while ((len = fr.read(chs)) != -1) {  // <span style="font-family: Arial;">fr.read(chs))表示每次读一个字符数组</span>//写入数据.fw.write(chs,0,len); // len是读到数据的实际长度}// 释放资源,关闭遵循就近原则,fw最近,先关fwfw.close();fr.close();}}
  小结:字节流基本流,也是通用流,主要用于处理二进制流数据,但是实际中很多数据是文本形式,所以又提出的字符流概念,在使用中,对文本形式数据主要用字符流进行操作;二进制流数据操作选做字节流操作,如果使用字符流会导致数据丢失。


3 1
原创粉丝点击