2017-08-26 64 views
1

瀏覽一些答案,我發現裏面的一切,下面的行應招:複製目錄和使用文件API中的Java

Files.copy(Paths.get(from), Paths.get(to),StandardCopyOption.REPLACE_EXISTING); 

然而,當我真正提供了一些目錄路徑我得到的各種異常或實際上沒有任何內容被複制,例如:

kopiraj("C:/Users/Aleksije/Desktop/Rokovi/Rokovi 2016","C:/Users/Aleksije/Desktop/OVDE"); 

PS kopiraj(..)是另一個類

public void kopiraj(String from, String to) throws IOException { 
    long t1 = System.nanoTime(); 
    Files.copy(Paths.get(from), Paths.get(to),StandardCopyOption.REPLACE_EXISTING); //the line that matters 
    proteklo = t1 - System.nanoTime(); 
    traverse(to); 
    } 
+0

你能提供給我們例外嗎?你也可以看看這個答案:https://stackoverflow.com/questions/11651900/how-to-recursively-copy-entire-directory-including-parent-folder-in-java –

回答

0

的方法我發現一些閱讀後:

您可以通過使用拷貝(路徑,路徑, CopyOption複製文件或目錄。 ..) 方法。如果目標文件存在,複製將失敗, 除非指定了REPLACE_EXISTING選項。

目錄可以被複制。但是,目錄中的文件不是 已複製,所以即使原始目錄 包含文件,新目錄也是空的。

因此我不得不修改我的工作方式如下:

public void kopiraj(String from, String to) throws IOException { 
    File[] sadrzaj = new File(from).listFiles(); 
    for(File f : sadrzaj) { 
     if(f.isFile()) { 
     sviFajlovi.add(f); 
     Files.copy(Paths.get(f.getAbsolutePath()), Paths.get(to + f.getName()), StandardCopyOption.REPLACE_EXISTING); 
     } else { 
     Files.copy(Paths.get(f.getAbsolutePath()), Paths.get(to + f.getName()), StandardCopyOption.REPLACE_EXISTING); 
     kopiraj(f.getAbsolutePath() + "/", to + f.getName() + "/"); 
     } 
    } 
    } 

要澄清的人可能面臨着同樣的問題:從一個目錄

Files.copy(Paths.get(f.getAbsolutePath()), Paths.get(to + f.getName()), StandardCopyOption.REPLACE_EXISTING); 

當使用拷貝另一種情況是,必須在目標目錄中提供新文件名,這就是爲什麼我添加了正在複製到目標文件的名稱。 (否則你會失去你的目標文件夾)。

kopiraj(f.getAbsolutePath() + "/", to + f.getName() + "/"); 

當複製一些子目錄您通常要守在那裏的內容,因此,我調用kopiraj()方法用一個新的目標,已經更新複製到現在複製子目錄的內容。

相關問題