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最近,先关fw
		fw.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最近,先关fw
		fw.close();
		fr.close();
	}
}


  小结:

字节流基本流,也是通用流,主要用于处理二进制流数据,但是实际中很多数据是文本形式,所以又提出的字符流概念,在使用中,对文本形式数据主要用字符流进行操作;二进制流数据操作选做字节流操作,如果使用字符流会导致数据丢失。

复制容器文件 复制文件原理_字节流