A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

将C盘中的一个文件夹里面的所有文件(包括子文件)拷贝到D盘里面的文件夹里面,用IO流怎么做?

7 个回复

倒序浏览
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-23 21:10:13
7#
路过 学习一下
回复 使用道具 举报
nadax 中级黑马 2014-8-23 21:23:57
8#
楼上的比较健壮了,基本情况都考虑到了。不过还能在简化些,因为有类库里已经实现了这些判断。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马