文件夹的拷贝需要考虑许多细节。。。
下面直接看代码`
package io;
import java.awt.image.ImagingOpException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 文件夹拷贝 1.文件直接复制 2.文件夹创建mkdirs() 3.递归查找子孙级
*
*/
public class Filecopy2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//源目录
String srcPath = "e:/xp/test/study";
// 目标目录
String destPath = "e:/xp/test/study1";
File src = new File(srcPath);
File dest = null;
if (src.isDirectory()) {//
// isDirectory()是检查一个对象是否是文件夹。返回值是boolean类型的。如果是则返回true,否则返回false。
dest = new File(destPath, src.getName());
}
copyDirDetail(src, dest);
}
//public static void
/**
* 拷贝文件夹的细节
*
*/
public static void copyDirDetail(File src, File dest) {
// TODO Auto-generated method stub
if (src.isFile()) {
try {// 文件
FileUnit.copyFile(src,dest);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {// 文件夹
// 明确目标文件夹存在
e.printStackTrace();
}
} else if (src.isDirectory()) {// 文件夹
// 确保目标文件夹存在
dest.mkdirs();
// 获取下一级目录|文件
for (File sub : src.listFiles()) {// 测试此抽象路径名表示的文件是否是一个标准文件
copyDirDetail(sub, new File(dest, sub.getName()));
}
}
}
}
package io;
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 FileUnit {
/**
*
* 文件的拷贝 源文件的路径 目录文件路径
*
* @throws FileNotFoundException IOException
*
*/
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException, IOException {
// 1.建立联系(存在且为文件)+目的地(文件可以不存在)
File sre=new File(srcPath);
File dest=new File(destPath);
copyFile(new File(srcPath), new File(destPath));
}
public static void copyFile(File src,File dest) throws FileNotFoundException, IOException {
if (!src.isFile()) {// 不是文件夹或者为null
System.out.println("只能拷贝文件");
throw new IOException("只能拷贝文件");
}
// 2.选择流
InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dest);
// 3.文件拷贝 循环+读取+写出
byte[] flush = new byte[1024];
// 这句话的意思就是说你先定义了一个byte类型的数组,数组长度为1024。也就是说你最多可以存1024个字节的东西,如果超过这个值就会报溢出的异常了
int len = 0;
try {// 读取
while (-1 != (len = is.read(flush))) {
// 写出
os.write(flush, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("读取文件失败");
}
os.flush();// 强制刷出
// 关闭流
os.close();
is.close();
}
}
```如有不足请指正,谢谢