java实现文件和文件夹复制_第1页
java实现文件和文件夹复制_第2页
java实现文件和文件夹复制_第3页
java实现文件和文件夹复制_第4页
java实现文件和文件夹复制_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、package com.yingzi.javaCommand;import java.io.*;public class CopyFile String startFilePath = null;String desFilePath = null;public CopyFile( /* 如果复制的是个文件夹,那么有个前提,那就是目的文件夹所在位置,不能在源文件夹的子目录中,* 如:如果源文件夹为D:/yingzi ,那么目的文件夹不能在D:/yingzi文件夹下的某个位置,因为这样* 会造成无限循环源文件夹下内容一直增加着,而目的文件夹下内容随着源文件夹的增加而增加,* windows下就不可

2、以复制,不信你试试* param startFilePath* = 原始文件路径* param desFilePath* = 目标文件路径* return = 返回true,表示复制成功,返回false表示复制失败*/public boolean copy(String startFilePath, String desFilePath this.startFilePath = startFilePath;this.desFilePath = desFilePath;/ 判断是否返回成功的变量boolean copyFinished = false;File startFile = new F

3、ile(startFilePath;File desFile = new File(desFilePath;/ 如果源文件是个文件if (startFile.isFile( copyFinished = this.copySingleFile(startFile, desFile;/ 如果源文件是个文件夹,就需要递归复制 else /如果目标文件夹是源文件夹的一个子目录的情况,拒绝复制,因为会造成无限循环if(desFilePath.startsWith(startFilePathSystem.out.println(error copy;return false;elsecopyFinish

4、ed = this.copyFolder(startFile, desFile;return copyFinished;/* 此方法为复制单个文件,如果复制多个文件可以递归调用*/private boolean copySingleFile(File startSingleFile, File desSingleFile boolean rightCopy = false;/ -从源文件中输入内存入byte中,在将byte写入目标文件-FileInputStream singleFileInputStream = null;DataInputStream singleDataInputStre

5、am = null;FileOutputStream singleFileOutputStream = null;DataOutputStream singleDataOutputStream = null;try singleFileInputStream = new FileInputStream(startSingleFile;singleDataInputStream = new DataInputStream(new BufferedInputStream(singleFileInputStream;singleFileOutputStream = new FileOutputStr

6、eam(desSingleFile;singleDataOutputStream = new DataOutputStream(new BufferedOutputStream(singleFileOutputStream;byte b = new byte1024;int len;while (len = singleDataInputStream.read(b != -1 singleDataOutputStream.write(b, 0, len;/刷新缓冲区singleDataOutputStream.flush(; catch (Exception e e.printStackTra

7、ce(; finally try if (singleDataInputStream != nullsingleDataInputStream.close(;if (singleDataOutputStream != nullsingleDataOutputStream.close(; catch (Exception e e.printStackTrace(;/判断源文件和目标文件大小是否相同,如果相同证明复制成功if (startSingleFile.length( = desSingleFile.length(rightCopy = true;elserightCopy = false;

8、return rightCopy;/* 递归复制文件夹,因为文件夹下不止一个文件,里面可能有文件或文件夹, * 因此需要调用递归方法* param startFolder = 需要复制的文件夹* param desFolder = 复制目的地的文件夹* return = true 表示成功,false 表示失败*/public boolean copyFolder(File startFolder, File desFolder boolean rightCopy = false;rightCopy = this.recursionCopy(startFolder, desFolder;ret

9、urn rightCopy;/* 复制文件夹函数,此函数是个递归,会复制文件夹下的所有文件* param recFileFolder* = 需要拷贝的文件夹或子文件夹* param recDesFolder* = 拷贝的目的文件夹或子文件夹,* return = true表示成功, false表示失败*/private boolean recursionCopy(File recFileFolder, File recDesFolder File desFolder = recDesFolder;/因为目的文件夹或子文件夹不存在,需要创建desFolder.mkdir(;/此为需要拷贝的文件夹

10、下的所有文件列表(其中有文件和文件夹File files = recFileFolder.listFiles(;/如果是个空文件夹if(files.length=0 return true;/* 将文件夹下所有文件放入for循环,如果是文件,那么调用copySingleFile(拷贝文件,* 如果是文件夹,那么递归调用此函数*/for (File thisFile : files / 如果此文件是个文件,那么直接调用单个文件复制命令复制文件if (thisFile.isFile( / 得到此文件的新位置地址String desContentFilePath = this.getSubFileP

11、ath(startFilePath,desFilePath, thisFile.getAbsolutePath(;boolean rightCopy = this.copySingleFile(thisFile, new File(desContentFilePath;/ 如果复制失败,就跳出循环停止复制if(!rightCopy return false;/ 如果是个文件夹 else /* 此函数是为了得到目的文件夹的地址,* 如:源文件夹为:D:/yingzi/text (其中text文件夹下有另一个文件夹 second : D:/yingzi/text/second* 目标位置为:E:/

12、aa/text* 那么此second文件夹在目标地址的位置就是E:/aa/text/second*/String desContentFilePath = this.getSubFilePath(startFilePath,desFilePath, thisFile.getAbsolutePath(;/ 递归的调用此函数,确保函数都被复制完全boolean rightCopy = recursionCopy(thisFile, new File(desContentFilePath;if(!rightCopy return false;return true;/* 此函数是为了得到目的文件夹的

13、地址,* 如:源文件夹为:D:/yingzi/text (其中text文件夹下有另一个文件夹 second : D:/yingzi/text/second* 目标位置为:E:/aa/text* 那么此second文件夹在目标地址的位置就是 E:/aa/text/second* 此方法中 startFolderPath = D:/yingzi/text (源文件夹 ; * desFolderPath = E:/aa/text (目标位置; * currentFilePath = D:/yingzi/text/second(需要复制的子文件夹 * 返回值为: E:/aa/text/second */ String getSubFilePath(String startFolderPath, String private desFolderPath, String currentFilePath String currentDesFilePath = null null; int i = startFolderPath.length(; /int j = desFolderPath.las

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论