黑马程序员技术交流社区

标题: 在如果复制多级文件夹中的java文件啊 [打印本页]

作者: 爽朗的菜籽    时间: 2014-10-16 10:14
标题: 在如果复制多级文件夹中的java文件啊
求指教谢谢了
作者: 微笑凡    时间: 2014-10-16 11:11
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
* 需求:复制多级文件
* 思路:使用File关联源文件和目的文件,目的文件和源文件名一样,只是盘路径不一样
*                 定义一个方法,接受的参数是源文件和目的文件
*                 使用listFiles方法,将源文件存入File数组中
*                 使用高级for遍历File数组,
*                 在遍历过程中,每次遍历关联不同路径下的同级目录文件或者文件夹
*                 判断遍历的文件是否是目录
*                 如果是,同级文件创建文件夹
*                 使用递归,调用函数本身,参数是遍历的文件和同级目录文件
*                 如果不是,判断是否存在此文件,如果不存在,创建文件
*                 因为可能不是纯文本,使用字节流读取操作文件,记得关闭底层资源
*/
public class Copy_1
{
        public static void main(String[] args) throws IOException
        {
                File source = new File("G:\\a - 副本");
                File dest = new File("d:", source.getName());
               
                if(!dest.exists())//这一步必须要有,否则系统出错-“系统找不到指定路径”
                {
                        dest.mkdir();
                }
               
                copyFile(source, dest);
        }

        private static void copyFile(File source, File dest) throws IOException
        {
                File[] files = source.listFiles();
               
                for(File file : files)
                {
                        System.out.println(file);
                        File newFile = new File(dest, file.getName());
                        
                        if(file.isDirectory())
                        {
                                if(!newFile.exists())
                                {
                                        newFile.mkdir();
                                }
                                
                                copyFile(file, newFile);
                        }else
                        {
                                FileInputStream fis = new FileInputStream(file);
                                FileOutputStream fos = new FileOutputStream(newFile);
                                
                                byte[] bt = new byte[1024];
                                int len = 0;
                                
                                while((len=fis.read(bt))!=-1)
                                {
                                        fos.write(bt, 0, len);
                                }
                                
                                fis.close();
                                fos.close();
                        }
                }
        }
}















作者: 爽朗的菜籽    时间: 2014-10-16 11:14
额。。。大佬你这复制的是我的代码诶,,,改都没有改过,,
作者: DreamSeeker    时间: 2014-10-16 11:54
递归复制:如果是目录就创建,然后继续递归;如果是文件判断是不是endsWith(".java"),是的话就复制。
作者: 犹豫铅笔    时间: 2014-10-16 13:47
刚写的,可能功能不是蛮强悍,但是功能基本实现


  1.         private static void copyFile(String pathNameRes, String pathNameDes) throws Exception {
  2.                 File fileRes = new File(pathNameRes);
  3.                 File fileDes = new File(pathNameDes);
  4.                
  5.                 File file = new File(pathNameDes+"\\"+fileRes.getName());
  6.                
  7.                 file.mkdirs();
  8.                 System.out.println("创建文件:" + file.getAbsolutePath() + "成功");
  9.                
  10.                 InputStream in = null;
  11.                 OutputStream out = null;
  12.                 File[] files = fileRes.listFiles();
  13.                 if(files!=null && files.length>0){
  14.                         for(File f : files){
  15.                                 if(f.isDirectory()){
  16.                                         copyFile(pathNameRes + "\\" + f.getName(),pathNameDes+"\\"+fileRes.getName() + "\\" +f.getName());
  17.                                 }
  18.                                 if(f.isFile()){
  19.                                         in = new FileInputStream(f);
  20.                                         out = new FileOutputStream(pathNameDes + "\\" + fileRes.getName() + "\\" + f.getName());
  21.                                         byte[] b = new byte[1024*1024];
  22.                                         int len = 0;
  23.                                         while((len = in.read(b)) != -1){
  24.                                                 out.write(b, 0, len);
  25.                                         }
  26.                                         System.out.println("文件:" + pathNameDes + "\\" + fileRes.getName() + "\\" + f.getName() + "复制成功");
  27.                                 }
  28.                         }
  29.                        
  30.                 }
  31.         }
  32. }
复制代码


作者: 坚持525    时间: 2014-10-16 14:22
微笑凡 发表于 2014-10-16 11:11
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

你这代码不对吧,这是复制整个文件夹吧,人家要的是复制一个java文件的,所以要拿endsWith(".java")来判断一下吧,
作者: 微笑凡    时间: 2014-10-16 21:25
爽朗的菜籽 发表于 2014-10-16 11:14
额。。。大佬你这复制的是我的代码诶,,,改都没有改过,,

不好意思,看见了就借用了。。。
作者: 郑飞    时间: 2014-10-21 00:00
自定义文件名过滤器继承FilenameFilter
文件夹.listFile(过滤器对象); 得到的就是当前文件夹下所有.java文件的数组了




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