gpt4 book ai didi

java - 使用 Java 中的 Files API 复制目录及其中的所有内容

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:00 24 4
gpt4 key购买 nike

浏览一些答案,我发现以下行应该可以解决问题:

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

但是,当我实际提供一些目录路径时,我会遇到各种异常,或者实际上没有复制任何内容,例如:

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

附注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);
}

最佳答案

经过一番阅读,我发现:

You can copy a file or directory by using the copy(Path, Path, CopyOption...) method. The copy fails if the target file exists, unless the REPLACE_EXISTING option is specified.

Directories can be copied. However, files inside the directory are not copied, so the new directory is empty even when the original directory contains files.

因此我必须修改我的工作方法如下:

  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() 方法,该目标已更新为复制到现在复制的子目录。

关于java - 使用 Java 中的 Files API 复制目录及其中的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45895272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com