使用I/O流實作目錄的拷貝
實作方法
1、建立兩個方法,在一個 FileEach(File dir,File copyadd)方法中去遞歸周遊傳入的dir目錄,如果目前為目錄,則在copyadd的基礎上建立此檔案夾。
if (dir.isDirectory()){
File newfile = new File(copyadd, dir.getName());
newfile.mkdir();
2、再去循環周遊此檔案夾,如果周遊得到的file是檔案那麼就調用dirCopy(String source,File copyadd)去實作檔案的拷貝;若為檔案夾則遞歸
File[] files = dir.listFiles();
if (files.length>0){
for(File file:files){
if (file.isFile()){
dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
}else{
FileEach(file,newfile);
}
}
}
整體代碼
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Author K U N 2021/1/11
*/
public class T2 {
/**
* 檔案複制
* @param source
* @param copyadd
* @throws IOException
*/
public static void dirCopy(String source,File copyadd) throws IOException {
try(
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(copyadd);
){
int len;
byte[] b = new byte[1024];
while ((len = fis.read(b))!=-1){
fos.write(b,0,len);
}
}
}
/**
* 遞歸周遊目标目錄
* 若目前為目錄,建立一個新的mul
* 若目前為檔案,則調用I\O方法
* @param dir
* @param copyadd
* @throws IOException
*/
public static void FileEach(File dir,File copyadd) throws IOException {
if (dir.isDirectory()){
File newfile = new File(copyadd, dir.getName());
newfile.mkdir();
File[] files = dir.listFiles();
if (files.length>0){
for(File file:files){
if (file.isFile()){
dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
}else{
FileEach(file,newfile);
}
}
}
}
}
public static void main(String[] args) throws IOException {
//建立兩個目錄的執行個體。
File dir = new File("C:\\MyJava_File");
File copyadd = new File("C:\\Users\\K U N\\Desktop");
FileEach(dir,copyadd);
}
}