文件复制可能在电脑上直接Ctrl+C和Ctrl+V就可以把文件和文件里面的信息都复制到选择复制的文件夹,这个过程是很简单的;而在java里面通过代码去实现就不是很简单了,下面我就把我在java中实现复制的过程步骤讲一下:

注:Oid代表被复制的文件,New代表要复制到的文件夹;

第一步:获取文件路径,判断一下New的路径里面有没有这个同名的文件,没有就新建一个;

第二步:获取Oid下的子目录和子文件名称,如果是目录就到New里面创建目录,并且进行再次调用自身(递归),如果是文件就进行文件内容的复制;

第三步:建一个字节数组来存储一次读取的数据(文件数据的复制都是先转化为字节类型在进行复制,对于电脑来说图片和视频这些就是一些字符串或者也可以说是数字),然后通过while进行读取和输出;

第四步:打开流就要进行关闭,还有一点很重要,通过flush方法强制把数据输出,把缓存区就清空了;

代码部分:

第一步:调用;

java高效复制文件 java中文件的复制_文件复制

 

我把复制的主要部分进行了封装,这样就可以在全局使用文件复制,直接通过类就可以调用文件复制的方法;这里就是调用的封装的方法,EncapsulatedClass是封装的类名,copyFile就是文件复制的方法名称,这样封装的好处就是减少代码量和规范写法;

第二步:

java高效复制文件 java中文件的复制_java_02

主要用来获取目录名称和文件名称,和创建文件夹;而文件是不需要创建的因为在数据写入文件的时候它会判断有没有该文件,没有就创建;这里也比较繁琐,因为路径问题需要一定的拼接;而图中的OutByte(in,Out)是用来调用读取数据写入数据的方法,参数是读取和写入的路径;

 

第三步:

java高效复制文件 java中文件的复制_java高效复制文件_03

这一步的代码是用来实现数据的读取和数据的写入;

byte[]数组是用来存储一次读取的数据,后面的数字是代表一次读取的大小,一般是1024个字节,你也可以进行修改,因为电脑的处理速度是不一样的,如果处理快的电脑可以写大一点可以加快复制的速度,但是电脑处理慢的话写的太大反而速度会变慢,所以可以根据电脑的性能去改变这个值,当然最好就是1024个字节,1024个字节相当于1kb的大小,因为电脑处理时间是于纳秒为单位,即使是1kb一次的读取大小也是很快的;

while函数是把读取的数据进行写入到指定的文件里面,可以认为它一边读取一边写入文件里面;

这里要关闭流是因为它不会用完自己关闭,它会一直占据在那里,消耗电脑资源,所以一定要关闭;

 

 

结果部分:

java高效复制文件 java中文件的复制_数据_04

这里说的完成复制是指要复制的文件已经复制到指定的文件夹中,这里面可以看到有txt文件,java文件,还有图片和文件,当然图片和视频都是可以可以进行正常的打开和播放的,和源文件没有什么区别;

 

复制过来文件的目录结构是没有发生改变的,从图片中也可以看到文件后面是有大小的,说明里面数据也是复制过来了;

java高效复制文件 java中文件的复制_java高效复制文件_05

这样整个文件复制就是完成的,这样和你在电脑上面直接操作的效果是一样的,只是实现的过程不一样;