2017-07-26 87 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

相关问题