黑马程序员技术交流社区

标题: 关于复制文件代码优化!! [打印本页]

作者: 田富丰    时间: 2014-5-30 01:31
标题: 关于复制文件代码优化!!
本帖最后由 田富丰 于 2014-5-30 23:37 编辑

写完这个代码后!!总感觉还可以优化!!不知道有没有大神啊!!而且我这个可能会出现栈溢出!所以想有没有其它的办法呢!
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;

  4. class CopyDirTest{
  5.         public static void main(String[] args)throws Exception{
  6.                 File srcFile = new File("F:\\音乐");        //源文件夹
  7.                 File fileDes = new File("F:\\java");//将音乐整个目录复制到java目录下
  8.                 copyDir(srcFile,fileDes);
  9.         }
  10.         public static void copyDir(File srcFile,File desFile)throws Exception{
  11.                 //创建文件读取和写入流,用于复制文件
  12.                 FileInputStream fis = null;
  13.                 FileOutputStream fos = null;
  14.                 //获取源文件的绝对路径
  15.                 String srcName = srcFile.getAbsolutePath();
  16.                 //通过截取最后'\\',记录目的末创建的路径
  17.                 String dirName = srcName.substring(srcName.lastIndexOf('\\'));
  18.                 //记录目的路径
  19.                 String desDirName = desFile.getAbsolutePath()+dirName;
  20.                 //在目的路径中创建一个和源一样的目录
  21.                 desFile = new File(desDirName);
  22.                 desFile.mkdirs();
  23.                
  24.                 //获取原目录的所有文件
  25.                 File[] files = srcFile.listFiles();
  26.                 //通过for循环遍历所以的文件
  27.                 for(File f:files){
  28.                         //判断是否是文件夹
  29.                         if(f.isDirectory()){
  30.                                 //如果是就递归
  31.                                 copyDir(f,desFile);
  32.                                 
  33.                         } else if(f.isFile()){        //判断是否是文件
  34.                                 //获取文件的名字
  35.                                 String fileName = f.getName();        
  36.                                 //读取文件
  37.                                 fis = new FileInputStream(f);
  38.                                 //将文件复制到指定的目的地
  39.                                 fos = new FileOutputStream(desDirName+"\\"+fileName);

  40.                                 byte[] bys = new byte[1024*1024];
  41.                                 int len = 0;

  42.                                 while((len = fis.read(bys))!=-1){
  43.                                         fos.write(bys,0,len);
  44.                                         fos.flush();
  45.                                 }
  46.                                 fis.close();
  47.                                 fos.close();
  48.                         }
  49.                 }



  50.         }
  51. }
复制代码





作者: 饥渴ing    时间: 2014-5-30 02:55
本帖最后由 饥渴ing 于 2014-6-4 23:03 编辑

File file = new File("d:\\CamPlay.exe");
file.renameTo(new File("c:\\CamPlay.exe")); //剪切
这个够简化了吧.

public static void main(String[] args) {
  File file = new File("d:\\test");
  t(file, new File("c:"));
}
public static void t(File file, File target) {
if (!target.exists() && target.isDirectory()) {//判断下输入的目标文件夹是否存在不存在就创建
   target.mkdir();
  }
  target = new File(target.getPath() + File.separatorChar
    + file.getName());
  if (file.isDirectory()) {
   target.mkdir();// 在目标位置创建目录
   File[] files = file.listFiles();
   for (File f : files) {
    t(f, target);
   }
  } else if (file.isFile()) {
   try {
    FileInputStream fis = new FileInputStream(file);
    FileOutputStream fos = new FileOutputStream(target);
    while (fis.available() > 0)
     fos.write(fis.read());
    fis.close();
    fos.close();
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
   }
  }
}


作者: jsjchenlong    时间: 2014-5-30 08:43
支持一下
作者: l939    时间: 2014-5-30 09:01
饥渴ing 发表于 2014-5-30 02:55
File file = new File("d:\\CamPlay.exe");
file.renameTo(new File("c:\\CamPlay.exe"));
这个够简化了吧. ...

这个能复制文件????!!!!
作者: yuZhe_toString    时间: 2014-5-30 09:25
文件夹过多或层过深用递归容易把栈压爆。
作者: 侯金龙    时间: 2014-5-30 10:29
顶一个,一定有大神
作者: More    时间: 2014-5-30 12:37
已经很好了啊
作者: 喜爱    时间: 2014-5-30 17:37
可以对文件输入与输出,将其封装成一个方法就更好了。。。
作者: 田富丰    时间: 2014-5-30 22:24
饥渴ing 发表于 2014-5-30 02:55
File file = new File("d:\\CamPlay.exe");
file.renameTo(new File("c:\\CamPlay.exe")); //剪切
这个够简 ...

谢谢你的回答!!学习啦!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2