2012-08-11 75 views
0
File content[] = new File("C:/FilesToGo/").listFiles(); 

for (int i = 0; i < content.length; i++){      

    String destiny = "C:/Kingdoms/"+content[i].getName();   
    File desc = new File(destiny);  
    try { 
     Files.copy(content[i].toPath(), desc.toPath(), StandardCopyOption.REPLACE_EXISTING); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }     
} 

這就是我所擁有的。它複製一切就好了。 但其中的內容有一些文件夾。文件夾被複制,但文件夾的內容不是。如何在Java中將整個內容從一個目錄複製到另一個目錄?

回答

0

遞歸。這裏是一個使用rescursion刪除系統文件夾的方法:

public void move(File file, File targetFile) { 
    if(file.isDirectory() && file.listFiles() != null) { 
     for(File file2 : file.listFiles()) { 
      move(file2, new File(targetFile.getPath() + "\\" + file.getName()); 
     } 
    } 
    try { 
     Files.copy(file, targetFile.getPath() + "\\" + file.getName(), StandardCopyOption.REPLACE_EXISTING); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

沒有測試代碼,但它應該工作。基本上,它挖下來到文件夾中,告訴它移動的項目,如果它的一個文件夾,都要經過它的所有兒童,並將其移動等

+0

但這將刪除子文件夾及其內容直接複製到命運,難道不?我還需要有子文件夾。 – user1541106 2012-08-11 22:12:42

+1

這不會刪除子文件夾,Files.copy方法不會刪除任何東西。它只是把它的副本放在新路徑中 – 2012-08-11 22:14:49

+0

Nosuchfileexception C:\ Source \ subfolder \ afile.txt - > C:\ Kingdoms \ Source \ subfolder \ afile.txt 它複製了除子文件夾內容以外的所有內容 – user1541106 2012-08-11 22:32:00

2

會推薦在Apache的百科全書IO使用FileUtils

FileUtils.copyDirectory(new File("C:/FilesToGo/"), 
         new File("C:/Kingdoms/")); 

複製目錄&內容。

0

只是爲了闡明Alex Coleman的答案中需要改變的地方,以使代碼正常工作。下面是我測試Alex的代碼修改後的版本,併爲我工作得很好:

private void copyDirectoryContents(File source, File destination){ 
    try { 
     String destinationPathString = destination.getPath() + "\\" + source.getName(); 
     Path destinationPath = Paths.get(destinationPathString); 
     Files.copy(source.toPath(), destinationPath, StandardCopyOption.REPLACE_EXISTING); 
    }   
    catch (UnsupportedOperationException e) { 
     //UnsupportedOperationException 
    } 
    catch (DirectoryNotEmptyException e) { 
     //DirectoryNotEmptyException 
    } 
    catch (IOException e) { 
     //IOException 
    } 
    catch (SecurityException e) { 
     //SecurityException 
    } 

    if(source.isDirectory() && source.listFiles() != null){ 
     for(File file : source.listFiles()) {    
      copyDirectoryContents(file, new File(destination.getPath() + "\\" + source.getName())); 
     } 
    } 

}