File類的應用--拷貝
拷貝一個目錄,包括裏面的文件,要用到遞歸.也就是函數本身調用自身.
遞歸要注意:
1,限定條件,結束遞歸
2,要注意遞歸的次數,儘量避免內存溢出思路:1,在拷貝的位置先創建目
2,遍歷時不是文件,是文件則直接拷貝過去
不是文件則遞歸,創建目錄,再對目錄中的文件在進行判斷
public class CopyDir {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
File src = new File("F:/java/day21.1");
File dest = new File("F:");
copyDir(src, dest);
}
public static void copyDir(File src, File dest) throws Exception {
// 獲取要創建的文件夾的路徑
File newDir = new File(dest, src.getName());
// 在指定路徑下創建新的文件夾
newDir.mkdir();
// 獲取源文件中該文件夾中的文件
File[] arr = src.listFiles();
// 遍歷
for (File file : arr) {
// 判斷是否是文件,若是文件則直接拷貝
if (file.isFile())
// 拷貝到新創建的目錄下
copyFile(file, new File(newDir, file.getName()));
if (file.isDirectory())
//是文件夾則遞歸
copyDir(file, newDir);
}
}
//拷貝文件
private static void copyFile(File src, File dest) throws IOException {
try (InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dest);) {
byte[] buff = new byte[1024];
int len;
while ((len = is.read(buff)) != -1) {
os.write(buff, 0, len);
}
}
}
}