黑马程序员技术交流社区

标题: 问大家一个思路,我看了面试完同学的面试题,自己不会做,大家帮下忙。 [打印本页]

作者: 相濡、彼岸    时间: 2014-8-22 12:23
标题: 问大家一个思路,我看了面试完同学的面试题,自己不会做,大家帮下忙。
将C盘中的一个文件夹里面的所有文件(包括子文件)拷贝到D盘里面的文件夹里面,用IO流怎么做?

作者: 复仇者联盟    时间: 2014-8-22 12:43
public class Copy {
        public static void main(String[] args)   {
                File source = new File("c:\\source");
                File target = new File("d:\\");
                copyDir(source, target);
        }

        // 拷贝目录
        private static void copyDir(File source, File target) {
                // 判断source
                if (source.isDirectory()) {
                        // 是目录
                        // 在target下创建同名目录
                        File dir = new File(target, source.getName());
                        dir.mkdirs();
                        // 遍历source下所有的子文件,将每个子文件作为source,将新创建的目录作为target进行递归。
                        File[] files = source.listFiles();
                        for (File file : files) {
                                copyDir(file, dir);
                        }
                } else {
                        // 是文件
                        // 在target目录下创建同名文件,然后用流实现文件拷贝。
                        File file = new File(target, source.getName());
                //        file.createNewFile();
                        copyFile(source, file);
                }
        }

        // 拷贝文件
        private static void copyFile(File source, File file)   {
                // 创建流对象
                InputStream is = null;
                OutputStream os = null;
                try {
                        is = new FileInputStream(source);
                        os = new FileOutputStream(file);

                        // 基本读写操作
                        byte[] bys = new byte[1024];
                        int len = 0;
                        while ((len = is.read(bys)) != -1) {
                                os.write(bys, 0, len);
                        }
                } catch(IOException e){
                        throw new RuntimeException("复制失败");
                }finally {
                        try{
                        if (os != null) {
                                os.close();
                        }
                        }catch(IOException e){
                               
                        }
                       
                        try{
                        if (is != null) {
                                is.close();
                        }
                        }catch(IOException e){
                               
                        }
                }
        }
}

作者: 复仇者联盟    时间: 2014-8-22 12:45
上面有注释,希望对你有所帮助。
作者: 相濡、彼岸    时间: 2014-8-22 13:38
复仇者联盟 发表于 2014-8-22 12:45
上面有注释,希望对你有所帮助。

谢谢!!
作者: hsy    时间: 2014-8-23 09:25
不错,代码还用到了递归,赞一个!
作者: THE_FUTURE    时间: 2014-8-23 11:14
递归在那一天!!!
作者: 七弟    时间: 2014-8-23 21:10
路过 学习一下
作者: nadax    时间: 2014-8-23 21:23
楼上的比较健壮了,基本情况都考虑到了。不过还能在简化些,因为有类库里已经实现了这些判断。




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