新手学java,菜鸟一只,求各位点拨一下。(利用java流实现文件夹的拷贝,可是拷贝结果文件全是零字节,求帮助)

ufowumengfei 2016-12-08 07:33:08

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()){//如果是文件jiazi而非文件
//确保目标文件夹存在
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);
}
}









...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufowumengfei 2016-12-08
  • 打赏
  • 举报
回复
引用 1楼你攀哥 的回复:
//选择文件输出流 OutputStream out = new FileOutputStream(srcCopy, true); byte[] by = new byte[100000]; int len = 0; while ((len = is.read(by)) != -1) { out.write(by, 0, len); } //flush()方法强制刷出 红色的代码 修改下 应该就可以了你的len 没有赋值
确实是那个地方的错误,len值恒为零,非常感谢解答
ufowumengfei 2016-12-08
  • 打赏
  • 举报
回复
引用 3楼hanpoyangtitan 的回复:
len 是0 写0个长度的字节到输出流,那肯定是空的。
确实是那个问题,len我忘了赋值了结果恒等于零,非常感谢回复!
什么都不能 2016-12-08
  • 打赏
  • 举报
回复
len 是0 写0个长度的字节到输出流,那肯定是空的。
ufowumengfei 2016-12-08
  • 打赏
  • 举报
回复
引用 1楼你攀哥 的回复:
//选择文件输出流 OutputStream out = new FileOutputStream(srcCopy, true); byte[] by = new byte[100000]; int len = 0; while ((len = is.read(by)) != -1) { out.write(by, 0, len); } //flush()方法强制刷出 红色的代码 修改下 应该就可以了你的len 没有赋值
好的,我试一下
曾阿牛026 2016-12-08
  • 打赏
  • 举报
回复
//选择文件输出流 OutputStream out = new FileOutputStream(srcCopy, true); byte[] by = new byte[100000]; int len = 0; while ((len = is.read(by)) != -1) { out.write(by, 0, len); } //flush()方法强制刷出 红色的代码 修改下 应该就可以了你的len 没有赋值

62,626

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧