Java中实现复制文件或文件夹——CopyUtil.java

本文介绍了一个简单的Java工具类,用于实现文件及文件夹的复制功能。该工具类通过使用缓冲流来提高读写效率,并采用递归方法处理文件夹的复制。代码提供了详细的实现步骤,包括如何复制单个文件和整个文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考自:http://blog.youkuaiyun.com/Dream_JavaWorld/article/details/3682075

拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。

但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。

[java] view plain copy
  1. packageorg.bruce.convert.util;
  2. importjava.io.*;
  3. /**
  4. *复制文件夹或文件夹
  5. */
  6. publicclassCopyUtil{
  7. publicstaticboolean_choice=true;
  8. //复制文件
  9. publicstaticvoidCopyFile(FilesourceFile,FiletargetFile)
  10. throwsIOException{
  11. //新建文件输入流并对它进行缓冲
  12. FileInputStreaminput=newFileInputStream(sourceFile);
  13. BufferedInputStreaminBuff=newBufferedInputStream(input);
  14. //新建文件输出流并对它进行缓冲
  15. FileOutputStreamoutput=newFileOutputStream(targetFile);
  16. BufferedOutputStreamoutBuff=newBufferedOutputStream(output);
  17. //缓冲数组
  18. byte[]b=newbyte[1024*5];
  19. intlen;
  20. while((len=inBuff.read(b))!=-1){
  21. outBuff.write(b,0,len);
  22. }
  23. //刷新此缓冲的输出流
  24. outBuff.flush();
  25. //关闭流
  26. inBuff.close();
  27. outBuff.close();
  28. output.close();
  29. input.close();
  30. }
  31. //复制文件夹
  32. publicstaticvoidCopyDirectory(StringsourceDir,StringtargetDir)
  33. throwsIOException{
  34. //新建目标目录
  35. (newFile(targetDir)).mkdirs();
  36. //获取源文件夹当前下的文件或目录
  37. File[]file=(newFile(sourceDir)).listFiles();
  38. for(inti=0;i<file.length;i++){
  39. if(file[i].isFile()){
  40. //源文件
  41. FilesourceFile=file[i];
  42. //目标文件
  43. FiletargetFile=newFile(
  44. newFile(targetDir).getAbsolutePath()+File.separator
  45. +file[i].getName());
  46. CopyFile(sourceFile,targetFile);
  47. }
  48. if(file[i].isDirectory()){
  49. //准备复制的源文件夹
  50. Stringdir1=sourceDir+File.separator+file[i].getName();
  51. //准备复制的目标文件夹
  52. Stringdir2=targetDir+File.separator+file[i].getName();
  53. CopyDirectory(dir1,dir2);
  54. }
  55. }
  56. }
  57. /**
  58. *稍作包装,
  59. *如果url1是文件的话,直接copyFile
  60. *如果url1是文件夹的话,再copyDirectory
  61. *@throwsIOException
  62. */
  63. publicstaticbooleanPowerCopy(Stringsource,Stringdest){
  64. try{
  65. Fileinput=newFile(source);
  66. if(input.isFile()&&!_choice){
  67. //如果输入是一个文件~
  68. (newFile(dest)).mkdirs();
  69. Fileoutput=newFile(dest+File.separator+input.getName());
  70. CopyFile(input,output);
  71. }elseif(input.isFile()&&_choice){
  72. CopyFile(newFile(source),newFile(dest));
  73. }else{
  74. //如果输入是一个文件夹~
  75. CopyDirectory(source,dest);
  76. }
  77. returntrue;
  78. }catch(IOExceptione){
  79. //TODOAuto-generatedcatchblock
  80. e.printStackTrace();
  81. BY.Err("exceptionoccuredinCopyUtil.powerCopy!");
  82. returnfalse;
  83. }
  84. }
  85. /**
  86. *usage!!
  87. */
  88. publicstaticvoidmain(Stringargs[])throwsIOException{
  89. //单文件~
  90. Stringurl1="/Users/user/Desktop/480*320.png";
  91. Stringurl2="/Users/user/Desktop/481*320.png";
  92. //源文件夹->目标文件夹
  93. //Stringurl1="/Users/user/Desktop/Resources";
  94. //Stringurl2="/Users/user/Desktop/Resources2";
  95. PowerCopy(url1,url2);
  96. }
  97. }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值