黑马程序员技术交流社区

标题: 求问遍历文件夹中的文件时,遍历文件的顺序 [打印本页]

作者: 袁冬梅    时间: 2012-5-11 13:25
标题: 求问遍历文件夹中的文件时,遍历文件的顺序
本帖最后由 袁冬梅 于 2012-5-11 13:32 编辑

不多说,我先上一个代码:
代码是复制工程下面的“实验2” 这个文件夹下面的全部内容到这个工程下面的"实验3"下面。
  1. package cn.itcast.test3;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;

  9. public class CopyDirWhihContents {
  10.         public static void main(String[] args)
  11.         {
  12.                 File fileName;
  13.                 fileName = new File("实验2"); //想要被复制的目标文件夹
  14.                 String parentDirectory = "bin/cn/itcast/test3";        //复制文件夹到这个目标目录下面
  15.                 copyDir(fileName,parentDirectory);
  16.                 copyAllFile(fileName,parentDirectory);                        
  17.         }        
  18.         //复制全部文件包括文件夹
  19.         public static void copyAllFile(File fileName,String parentDirectory)
  20.         {
  21.                 File[] fileList = fileName.listFiles();
  22.                 for(File f : fileList)
  23.                 {        
  24.                         String srcPath = f.getPath();
  25.                         System.out.println();
  26.                         System.out.println("srcPath: "+srcPath);
  27.                         String Star = "\\";
  28.                         String destFile = parentDirectory+Star+ srcPath;
  29.                         if(f.isDirectory())
  30.                         {
  31.                                 copyAllFile(f,parentDirectory);
  32.                         }else{
  33.                                 
  34.                                 System.out.println("目标文件为:"+destFile);
  35.                                 copyOneFile(srcPath, destFile);
  36.                         }
  37.                 }
  38.         }
  39.         //复制一个文件
  40.         private static void copyOneFile(String srcPath, String destPath) {
  41.                 BufferedInputStream bufr = null;
  42.                 BufferedOutputStream bufw = null;
  43.                 try {
  44.                         bufr = new BufferedInputStream(new FileInputStream(srcPath));
  45.                         bufw = new BufferedOutputStream(new FileOutputStream(destPath));
  46.                         byte[] buf = new byte[1024];
  47.                         int len;
  48.                         while((len = bufr.read(buf)) != -1)
  49.                         {
  50.                                 bufw.write(buf, 0, len);
  51.                                 bufw.flush();
  52.                         }
  53.                 } catch (FileNotFoundException e) {
  54.                         e.printStackTrace();
  55.                 } catch (IOException e) {
  56.                         e.printStackTrace();
  57.                 }finally{
  58.                         if(bufr != null)
  59.                                 try {
  60.                                         bufr.close();
  61.                                 } catch (IOException e) {
  62.                                         System.out.println("关闭输入流失败!");
  63.                                 }
  64.                         if(bufw != null)
  65.                                 try {
  66.                                         bufw.close();
  67.                                 } catch (IOException e) {
  68.                                         System.out.println("关闭输出流失败!");
  69.                                 }
  70.                 }
  71.         }
  72.         //复制目录
  73.         private static void copyDir(File fileName,String parentDirectory)
  74.         {
  75.                 File[] fileList = fileName.listFiles();
  76.                 for(File f : fileList)
  77.                 {               
  78.                         if(f.isDirectory())
  79.                         {
  80.                                 String srcPath = f.getPath();
  81.                                 System.out.println();
  82.                                 System.out.println("srcPath: "+srcPath);
  83.                                 String Star = "\\";
  84.                                 String destDir = parentDirectory+Star+ srcPath;
  85.                                 System.out.println("创建目标目录: "+destDir);
  86.                                 System.out.println("创建目录!"+new File(destDir).mkdirs());//创建目标目录: 实验3\实验2\1\ 实验2\1\2.1
  87.                                 copyDir(f,parentDirectory);
  88.                         }
  89.                 }
  90.         }

  91. }
复制代码
代码修改后:
  1.         //复制全部文件包括文件夹
  2.         public static void copyAllFile(File fileName,String parentDirectory)
  3.         {
  4.                 File[] fileList = fileName.listFiles();
  5.                 for(File f : fileList)
  6.                 {        
  7.                         String srcPath = f.getPath();
  8.                         System.out.println();
  9.                         System.out.println("srcPath: "+srcPath);
  10.                         String Star = "\\";
  11.                         String destFile = parentDirectory+Star+ srcPath;
  12.                         if(f.isDirectory())
  13.                         {
  14.                                 new File(destFile).mkdirs();//我想主函数中先把目录创建好的步骤不做,创建目录的步骤直接丢掉,直接在这里边遍历就边创建目录应该不会出问题吧?
  15.                                                                                                                                                 //我自己试验的时候,创建倒是没有出问题,不过我怕的是,会不会有文件在我复制好目录之前,
  16.                                                                                                                                                 //就有这个目录中的文件需要被复制,这样的话,不就找不到文件要在的目录了?
  17.                                                                                                                                                 //所以,我想问问,复制文件夹的时候,我这样做不会有问题吧?好吧,我分析代码的时候,
  18.                                                                                                                                                 //感觉是不会有问题的,但是不怕万一就怕一万,大家知道的帮我看看吧,谢谢
  19.                                 copyAllFile(f,parentDirectory);
  20.                         }else{
  21.                                 
  22.                                 System.out.println("目标文件为:"+destFile);
  23.                                 copyOneFile(srcPath, destFile);
  24.                         }
  25.                 }
  26.         }
复制代码

作者: 袁冬梅    时间: 2012-5-11 13:30
不好编辑,我在这里补充一下问题吧
按照上面我的修改,那么我的copyDir(fileName,parentDirectory);这个方法就可以去掉了,主函数中也不用调用它了。
我脑子有点迷糊了,分析后觉得我修改的那种方案可行,但是老怕会不会出现意外的问题。
作者: 黄坚声    时间: 2012-5-11 13:38
这位大姐啊,你太揪心了!
作者: 黄坚声    时间: 2012-5-11 13:39
package cn.itcast.test3;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyDirWhihContents {
        public static void main(String[] args)
        {
                File fileName;
                fileName = new File("实验2"); //想要被复制的目标文件夹
                String parentDirectory = "bin/cn/itcast/test3";        //复制文件夹到这个目标目录下面
                copyDir(fileName,parentDirectory);
                copyAllFile(fileName,parentDirectory);                        
        }        
        //复制全部文件包括文件夹
        public static void copyAllFile(File fileName,String parentDirectory)
        {
                File[] fileList = fileName.listFiles();
                for(File f : fileList)
                {        
                        String srcPath = f.getPath();
                        System.out.println();
                        System.out.println("srcPath: "+srcPath);
                        String Star = "\\";
                        String destFile = parentDirectory+Star+ srcPath;
                        if(f.isDirectory())
                        {
                                copyAllFile(f,parentDirectory);
                        }else{
                                
                                System.out.println("目标文件为:"+destFile);
                                copyOneFile(srcPath, destFile);
                        }
                }
        }
        //复制一个文件
        private static void copyOneFile(String srcPath, String destPath) {
                BufferedInputStream bufr = null;
                BufferedOutputStream bufw = null;
                try {
                        bufr = new BufferedInputStream(new FileInputStream(srcPath));
                        bufw = new BufferedOutputStream(new FileOutputStream(destPath));
                        byte[] buf = new byte[1024];
                        int len;
                        while((len = bufr.read(buf)) != -1)
                        {
                                bufw.write(buf, 0, len);
                                bufw.flush();
                        }
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }finally{
                        if(bufr != null)
                                try {
                                        bufr.close();
                                } catch (IOException e) {
                                        System.out.println("关闭输入流失败!");
                                }
                        if(bufw != null)
                                try {
                                        bufw.close();
                                } catch (IOException e) {
                                        System.out.println("关闭输出流失败!");
                                }
                }
        }
        //复制目录
        private static void copyDir(File fileName,String parentDirectory)
        {
                File[] fileList = fileName.listFiles();
                for(File f : fileList)
                {               
                        if(f.isDirectory())
                        {
                                String srcPath = f.getPath();
                                System.out.println();
                                System.out.println("srcPath: "+srcPath);
                                String Star = "\\";
                                String destDir = parentDirectory+Star+ srcPath;
                                System.out.println("创建目标目录: "+destDir);
                                System.out.println("创建目录!"+new File(destDir).mkdirs());//创建目标目录: 实验3\实验2\1\ 实验2\1\2.1
                                copyDir(f,parentDirectory);
                        }
                }
        }

}
作者: 黄坚声    时间: 2012-5-11 13:40
        //复制全部文件包括文件夹
        public static void copyAllFile(File fileName,String parentDirectory)
        {
                File[] fileList = fileName.listFiles();
                for(File f : fileList)
                {        
                        String srcPath = f.getPath();
                        System.out.println();
                        System.out.println("srcPath: "+srcPath);
                        String Star = "\\";
                        String destFile = parentDirectory+Star+ srcPath;
                        if(f.isDirectory())
                        {
                                new File(destFile).mkdirs();//我想主函数中先把目录创建好的步骤不做,创建目录的步骤直接丢掉,直接在这里边遍历就边创建目录应该不会出问题吧?
                                                                                                                                                //我自己试验的时候,创建倒是没有出问题,不过我怕的是,会不会有文件在我复制好目录之前,
                                                                                                                                                //就有这个目录中的文件需要被复制,这样的话,不就找不到文件要在的目录了?
                                                                                                                                                //所以,我想问问,复制文件夹的时候,我这样做不会有问题吧?好吧,我分析代码的时候,
                                                                                                                                                //感觉是不会有问题的,但是不怕万一就怕一万,大家知道的帮我看看吧,谢谢
                                copyAllFile(f,parentDirectory);
                        }else{
                                
                                System.out.println("目标文件为:"+destFile);
                                copyOneFile(srcPath, destFile);
                        }
                }
        }
作者: 袁冬梅    时间: 2012-5-11 14:11
黄坚声 发表于 2012-5-11 13:40
//复制全部文件包括文件夹
        public static void copyAllFile(File fileName,String parentD ...

?好吧,我的确揪心,为了这个问题我琢磨了大半天。。。。
其实我就是想问,我可以一边遍历文件夹,就把我遍历的这个文件夹包括里面的内容复制到另一个目录下面么?
如果我不先把目录创建好就这样做会出错么?

然后你把我的代码复制了是修改过么?




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