ufowumengfei 2016-12-08 11:11 采纳率: 100%
浏览 1923
已采纳

新手学java。利用java流实现文件夹的拷贝,可是拷贝结果文件全是零字节,求帮助

 package cn.java.io.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Demo09 {
    public static void dirsCopy(File srcPath,File destPath){
        File copyPath = destPath; 
        if(srcPath.isDirectory()){
            //如果是文件夹,则创建新的文件夹关联。此关联用于在目标文件夹下创建与源文件夹同名的文件夹目录
            copyPath = new File(destPath,srcPath.getName());
        }
        //在目标文件夹下创建与源文件夹同名的文件夹目录
        copyPath.mkdirs();
        try {
            //将文件夹内文件进行逐个拷贝
            fileDatilCopy(srcPath,copyPath);
        } catch (FileNotFoundException e) {
            System.out.println("文件不存在");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("文件读写失败");
            e.printStackTrace();
        }

    }

    private static void fileDatilCopy(File srcPath,File copyPath) throws FileNotFoundException, IOException {
        if(srcPath.isFile()){ //如果源文件是文件而非文件夹
            try {
                //调用fileCopy()方法对文件进行拷贝
                fileCopy(srcPath,copyPath);
            } catch (FileNotFoundException e) {
                System.out.println("文件不存在");
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("文件读写失败");
                e.printStackTrace();
            }
        }else if(srcPath.isDirectory()){//如果源文件夹是文件而非文件
            //确保目标文件夹存在
            copyPath.mkdirs();
            //获取下一级目录|文件
            for(File sub:srcPath.listFiles()){
                fileDatilCopy(sub,new File(copyPath,sub.getName()));
            }
        }
    }

    public  static void fileCopy(File srcPath,File srcCopy) throws FileNotFoundException,IOException  {
        //选择文件输入流 
        InputStream is = new FileInputStream(srcPath);
        //选择文件输出流
        OutputStream out = new FileOutputStream(srcCopy,true);
        byte[] by = new byte[100000];
        int len = 0;
        while(is.read(by)!= -1){
            //读多少写多少,防止资源浪费
            out.write(by,0,len);
        }
        //flush()方法强制刷出
        out.flush();
        //先打开后关闭原则,关闭流
        out.close();
        is.close();
    }

    public static void main(String[] args) {
        //原路径
        File srcPath  = new File("D:/myCode/temp");
        //指定路径
        File destPath = new File("D:/myCode/Temp_1");
        dirsCopy(srcPath,destPath);
    }
}

  • 写回答

3条回答 默认 最新

  • Readiay 2016-12-08 12:55
    关注

    你代码写的基本上没问题,就是一个小地方没有注意到
    图片说明

    你这里by数组获取到数据了,但是你执行write方法的时候,因为len总是0,所以总是把从0到0的这段by
    中值写到新的文件中,你需要这样改一下代码

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊