文件的拷贝
在应用程序中,I/O流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过输入流来读取源文件中的数据,并通过输出流将数据写入新文件。接下来通过一个案例来演示如何进行文件内容的拷贝。
首先在当前项目目录下创建文件夹source和target(右击项目名称)→【New】→【Folder】),然后在source文件夹中存放一个名称为“src.jpg”的图片文件,拷贝文件的代码如文件1所示。
文件1 Example04.java
1 import java.io.*;
2 public class Example04 {
3 public static void main(String[] args) throws Exception {
4 // 创建文件输入流对象读取指定目录下的文件
5 FileInputStream in = new FileInputStream("source/src.jpg");
6 // 创建文件输出流对象将读取到的文件内容写入到指定目录的文件中
7 FileOutputStream out = new FileOutputStream("target/dest.jpg");
8 // 定义一个int类型的变量len
9 int len = 0;
10 // 获取拷贝文件前的系统时间
11 long beginTime = System.currentTimeMillis();
12 // 通过循环将读取到的文件字节信息写入到新文件
13 while ((len = in.read()) != -1) {
14 out.write(len);
15 }
16 // 获取拷贝之后的系统时间
17 long endTime = System.currentTimeMillis();
18 // 输出拷贝花费时间
19 System.out.println("花费时间为:"+(endTime-beginTime) +"毫秒");
20 // 关闭流
21 in.close();
22 out.close();
23 }
24 }
程序运行结束后,刷新并打开target文件夹,发现source文件夹中的“src.jpg”文件被成功拷贝到了target文件夹并进行了重命名,如图1所示。
图1 拷贝前后的文件
文件1中,实现了图片文件的拷贝。在拷贝过程中,通过while循环将字节逐个进行拷贝。每循环一次,就通过FileInputStream的read()方法读取一个字节,并通过FileOutputStream的write()方法将该字节写入指定文件,循环往复,直到读取的长度len的值为-1,表示读取到了文件的末尾,结束循环,完成文件的拷贝。
程序运行结束后,会在命令行窗口打印拷贝图片文件所消耗的时间,如图2所示。
图2 运行结果
从图2可以看出,程序拷贝图片文件共消耗了2755毫秒。在拷贝文件时,由于计算机性能等各方面原因,会导致拷贝文件所消耗的时间不确定,因此每次运行程序的结果并不一定相同。