105java综合案例:文件拷贝

27 阅读2分钟

第十个代码模型】综合案例:文件拷贝


什么叫文件拷贝:

在windows下有一个copy命令,

 

该命令的使用格式:

copy 源文件路径 目标文件路径;

 

而现在希望可以通过程序来实现这样的操作命令,就是建立一个Copy程序类,这个程序类通过初始化的参数接受源文件和目标文件路径。

 

实现分析:

  1. 如果要想实现数据的拷贝肯定是要通过流的模式来完成,对于流有两类:字节流,字符流。

由于要拷贝的内容不一定是文字数据,也有可能是二进制的数据,所以用字节流会比较好;

 

  1. 在进行拷贝的时候需要确定拷贝模式:

在程序中开辟一个数组,这个数组的长度为文件的长度,将所有的数据一次性读取到该数组之中,随后进行输出;

如果文件过大,那么该程序无法使用

应该采用边写,边读的方式完成;

 

范例:代码初期模型

Package cn.mnldn.demo;

Import java.io.File;

Import java.io.FileInputStream;

Import java.io.FileOutputStream;

Import java.io.IOException;

 

代码问题:

1.在开发里面尽量不要使用do while,尽量去使用while循环

2.拷贝速度很慢

解决do while问题

//1.temp=input.read(),表示读取输入流中的一个字节;

//2.(temp=input.read())!=-1,判断这个读取后的字节(保存在temp)是否为-1,如果不是表示有内容

While((temp=input.read())!=-1{

Output.write(temp);

}

以上的方式是针对于一个字节的模式完成的,实际之中如果文件太大,这种做法一定不可取

如何变快,解决读取慢的问题:

就要加大一个缓冲,一次性读取多个字节数据,开辟一个字节数组。

 

读取:

/**

*实现具体的文件拷贝操作

*@param input 输入流对象

*@param output 输出流对象

*/


Private static void

copyHandle(InputStream input,OutputStream output) throws IOException

Long start=System.currentTimeMillis();

// inputStream有一个读取单个字节的方法:int read();

// OutputStream有一个输出单个字节的方法:void write(int data)

Int temp=0;

Byte data[]=new byte[4096];

//1.temp= input.read(data).表示将数据读取到字节数组之中,而后返回数据读取个数;

 

//2. (temp= input.read())!=-1.判断这个读数的个属于(保存在temp)是否为-1,如果不是表示有内容

While((temp=inputk.read(data))!=-1{

Output.wtite(data,0,temp);//输出部分字节数组

}

Long end =System.currentTimeMillis();

System.out.println(“【统计】拷贝文件所花费时间:”+(end-start));

 

以上是程序核心代码,也是会用最多的形式。

如果现在要求你处理的数据都在InputStream里面需要输出,就采用以上模型。