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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩秀山 中级黑马   /  2013-5-20 22:36  /  983 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) throws IOException {
                File f1 = new File("G:/练习/Demo_i02/folder");
                File f2 = new File("G:/练习/Demo_i02/folder/1111");//路径这里为什么不对啊??????
                copy(f1, f2);
        }

        public static void copy(File f1, File f2) throws IOException {
                File f = new File(f2, f1.getName());
                f.mkdir();// 在指定的目录下 创建一个文件夹
                File[] arr = f1.listFiles();// 接收它的所有子文件路径
                for (File file : arr) {
                        if (file.isFile()) {
                                FileInputStream fs = new FileInputStream(file);// 这里为什么使用字节流 ???
                                FileOutputStream fo = new FileOutputStream(new File(f2,f1.getName()));
                                byte[] lenth = new byte[1024];
                                int s;
                                while ((s = fs.read()) != -1) {
                                        fo.write(lenth, 0, s);
                                }
                               
                                fs.close();
                                fo.close();
                        } else {
                                copy(file, f);//为什么在这里还要调用这个方法???
                        }
                }
        }

1 个回复

倒序浏览
本帖最后由 张龙欢 于 2013-5-21 00:27 编辑

这是拷贝一个文件夹的程序!!File f2 = new File("G:/练习/Demo_i02/folder/1111");//路径这里为什么不对啊??????
因为你这边如果是在G:/练习/Demo_i02/folder的子目录下的话,当你执行到for (File file : arr)里面时, FileOutputStream fo = new FileOutputStream(new File(f2,f1.getName()));它这里会创建 f1里面的子文件,这样你定循环条件是出不去的,相当于死循环了。
FileInputStream fs = new FileInputStream(file);用字节流是因为它有read()方法可以去取文件字节。 copy(file, f);//为什么在这里还要调用这个方法???这句是用的递归思想,它这句的意思就是当你遍历到不是文件的时候就在重新调用该函数。黑马云青年为你解答!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马