2017-07-26 78 views
0

我的工作目錄中有不同種類的文件(.log,.xml,.opf等)。我需要複製他們的另一個文件夾。但只有一個文件被複制,據我所知這是因爲在複製方法中使用StandardCopyOption.REPLACE_EXISTING。 這是我的Java代碼如何使用Java 8複製具有不同擴展名的多個文件?

String currentDirectory = new File(new File("").getAbsolutePath()).getPath(); 

tempDirPath = Files.createDirectories(Paths.get(jobFolder).resolve("output")); 

try { 
      Files.copy(Paths.get(currentDirectory +File.separator+"content.xml"), tempDirPath, StandardCopyOption.REPLACE_EXISTING); 
      Files.copy(Paths.get(currentDirectory +File.separator+"content.smil"), tempDirPath, StandardCopyOption.REPLACE_EXISTING); 
      Files.copy(Paths.get(currentDirectory +File.separator+"content.opf"), tempDirPath, StandardCopyOption.REPLACE_EXISTING); 
      Files.copy(Paths.get(currentDirectory +File.separator+"content.ncx"), tempDirPath, StandardCopyOption.REPLACE_EXISTING); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

請幫我解決這個問題。 在此先感謝..!

+0

'REPLACE_EXISTING'應該是指如果已經有一個將被取代的content.xml,但如果你複製content.smil不會取代的content.xml。但是如果你提供了一個目標文件名,每個文件都是一樣的,那麼你會替換它。這不是Java的問題,而是文件系統如何處理一般情況(在文件夾中不能有兩個文件名相同)。如果這是你的問題,那麼你需要自己提供一個獨特的名字。 – Thomas

+0

是否要將源目錄中的某些選定文件複製到目標目錄?如果你想複製它們,你可以簡單地使用FileUtils方法 - FileUtils.copyDirectory(directory,destination) – woytech

+1

注意:你應該使用'Paths.get(currentDirectory,「context.xml」)''而不是'File .separator'。這就是'Paths.get()'可變參數的用途。 – RealSkeptic

回答

1

Files.copy第二個參數不是目錄,而是文件名。

它應該是:

Files.copy(Paths.get(currentDirectory +File.separator+"content.ncx"), tempDirPath.resolve("content.ncx"), StandardCopyOption.REPLACE_EXISTING); 
+0

這給了我正確的輸出。當我使用tempDirPath作爲第二個參數時,它只能用於一個文件的原因可能是@托馬斯的解釋..謝謝 – user2490093

相關問題