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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 smile_joe 于 2013-4-25 23:28 编辑

package cn.joe.FileandRecursion;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class exercise5 {
        public static void main(String[] args) throws IOException {
                // 先定义两个 文件
                File f1 = new File("G:/Ejava/day20");
                File f2 = new File("C:/");
//                调用方法
                copy(f1, f2);
        }

        public static void copy(File f1, File f2) throws IOException {
                // new 文件,作为接收
                File newFile = new File(f2, f1.getName());
                // 实例化文件
                newFile.mkdir();
                // 得到文件下子文件
                File[] subFiles = f1.listFiles();
                // 遍历file数组
                // if(subFiles != null) {
                for (File file : subFiles) {
                        if (file.isFile()) {
                                // 创建一个字节输入流
                                FileInputStream fis = new FileInputStream(file);
                                FileOutputStream fos = new FileOutputStream(newFile);
                                // 数组模式读取
                                byte[] buffer = new byte[1024];
                                int len;
                                // 循环全部读取
                                while ((len = fis.read(buffer)) != -1)
                                        fos.write(buffer, 0, len);
                                fis.close();
                                fos.close();
                        
                        } else
                                // 递归
                                copy(file, newFile);
                }
                // }
        }
}
//
//        关于文件夹的拷贝
//        请高手帮忙看下,编译ok,运行报错:拒绝访问
//        头大找不出错误,刚学,请帮忙看看,急...谢谢

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
package cn.joe.FileandRecursion;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Exercise5 {
         public static void main(String[] args) throws IOException {
                 // 先定义两个 文件
                File f1 = new File("G:/Users/Guo/workspace/myday22");
                 File f2 = new File("F:/");
//                调用方法
                copy(f1, f2);
         }

         public static void copy(File f1, File f2) throws IOException {
                 // new 文件,作为接收
                File newFile = new File(f2, f1.getName());
                 // 实例化文件
                newFile.mkdir();
                 // 得到文件下子文件
                File[] subFiles = f1.listFiles();
                 // 遍历file数组
                // if(subFiles != null) {
                 for (File file : subFiles) {
                         if (file.isFile()) {
                                 // 创建一个字节输入流
                                FileInputStream fis = new FileInputStream(file);
                                FileOutputStream fos = new FileOutputStream(new File(newFile,file.getName()));                        //标注:此处FileOutputStream的构造参数那,需要一个File实例,来指定要将文件拷贝到哪个路径
                                 // 数组模式读取
                                byte[] buffer = new byte[1024];
                                 int len;
                                 // 循环全部读取
                                while ((len = fis.read(buffer)) != -1)
                                         fos.write(buffer, 0, len);
                                 fis.close();
                                 fos.close();
                        
                         } else
                                 // 递归
                                copy(file, newFile);
                 }
                 // }
         }
}
错误在上面  标注  那
回复 使用道具 举报
我觉得按照你的想法应该这样创建输出流:
FileOutputStream fos = new FileOutputStream(f2.getAbsolutePath()+f1.getName()+"/"+file.getName());

评分

参与人数 1黑马币 +6 收起 理由
曹睿翔 + 6 很好!

查看全部评分

回复 使用道具 举报
复制文件的时候输出文件路径错误。
回复 使用道具 举报
本帖最后由 breeze 于 2013-4-25 23:01 编辑

              // if(subFiles != null) {                                                                    //问题出现在这里, 你的条件是是文件的就拷贝, else就递归, 但是递归的时候可能会出现null
                 for (File file : subFiles) {
                         if (file.isFile()) {
                                 // 创建一个字节输入流
                                 FileInputStream fis = new FileInputStream(file);
                                 FileOutputStream fos = new FileOutputStream(newFile);
                                 // 数组模式读取
                                 byte[] buffer = new byte[1024];
                                 int len;
                                 // 循环全部读取
                                 while ((len = fis.read(buffer)) != -1)
                                        fos.write(buffer, 0, len);
                                 fis.close();
                                 fos.close();
                        
                        } else                                                                              //如果一定要注释掉上面的// if(subFiles != null), 那么将这里的else改为 if(file.isDirectory())就可以了
                                 // 递归
                                 copy(file, newFile);

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 加油!

查看全部评分

回复 使用道具 举报
孙浩 发表于 2013-4-25 21:37
我觉得按照你的想法应该这样创建输出流:
FileOutputStream fos = new FileOutputStream(f2.getAbsolutePat ...

这种写法比较帅
回复 使用道具 举报
wangyougu010 发表于 2013-4-25 21:34
package cn.joe.FileandRecursion;

import java.io.File;

感谢 感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马