关于如何使用java代码拷贝目录,可能还存在bug
整体使用了递归进行遍历所有的目录并创建
至于为什么选择FileInputStream这个类,是因为我们目录中不止有普通文件,所以不选择FileReader
import java.io.*;
public class HomeWork_Copy {
public static void main(String[] args) throws Exception {
// 目的, 将D盘下的JavaNote文件移到C盘下
File f = new File("D:\\JavaNote");
File f1 = new File("C:");
// 防止第一个读取的是文件,防止出现找不到路径的情况
if (!(new File(f1.getAbsolutePath() + f.getAbsolutePath().substring(2)).exists())){
new File(f1.getAbsolutePath() + f.getAbsolutePath().substring(2)).mkdirs();
}
copy(f,f1);
}
public static void copy(File f, File f1) throws IOException{
if (f.isFile()){
FileInputStream fis = new FileInputStream(f.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(f1.getAbsolutePath() + f.getAbsolutePath().substring(2));
// 读取和写入文件操作
int readData = 0;
byte[] bytes = new byte[1024 * 1024];
while((readData = fis.read(bytes)) != -1){
fos.write(bytes, 0, readData);
}
fos.flush();
fis.close();
fos.close();
return;
}
File[] files = f.listFiles();
for (File file : files) {
if (file.isDirectory()) {
// 这里其实存在一个bug,但是我没改,可以使用三目运算符进行判断
// 一般来说复制的盘目录会自带'\\' 例如"C:\\"
// 如果不是直接拷贝在盘下的话,直接复制在盘中的目录下,"C:\\a\\b"结尾是不带"\\",所以可以使用三目运算符判断一下
String f4 = f1.getAbsolutePath() + file.getAbsolutePath().substring(2);
if (!new File(f4).exists()) new File(f4).mkdirs();
}
copy(file, f1);
}
}
}