【问题标题】:Does Files.copy(Path,Path) create directories?Files.copy(Path,Path) 创建目录吗?
【发布时间】:2015-06-18 07:10:23
【问题描述】:

我的 Java 程序 (C:/Users/java/dir1) 目录下有一堆文本文件(比如 ss1.txt、ss2.txt、ss3.txt 等)?
我想将我的 txt 文件移动到尚未创建的新目录中。我的所有文件都有一个字符串地址,我想我可以使用

将它们变成路径

路径 path = Paths.get(textPath);

将创建一个字符串(C:/Users/java/dir2),使用上述方法将其转换为路径,然后使用

Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2)

导致ss1.text 被复制到新目录?

【问题讨论】:

  • 我只是不断收到 IO 异常
  • 为什么不阅读他们的信息?

标签: java text-files file-copying


【解决方案1】:

方法Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2)不会创建目录,它会在java目录中创建文件dir2,其中包含ss1.txt数据。

你可以用这个代码试试:

File sourceFile = new File( "C:/Users/java/dir1/ss1.txt" );
Path sourcePath = sourceFile.toPath();

File destFile = new File( "C:/Users/java/dir2" );
Path destPath = destFile.toPath();

Files.copy( sourcePath, destPath );

记住使用 java.nio.file.Files 和 java.nio.file.Path。

如果你想使用类形式 java.nio 将文件从一个目录复制到另一个目录,你应该使用 Files.walkFileTree(...) 方法。您可以在这里查看解决方案Java: Using nio Files.copy to Move Directory

或者您可以简单地使用 apache http://commons.apache.org/proper/commons-io/ 库中的 `FileUtils 类,从 1.2 版开始可用。

File source = new File("C:/Users/java/dir1");
File dest = new File("C:/Users/java/dir2");
try {
    FileUtils.copyDirectory(source, dest);
} catch (IOException e) {
    e.printStackTrace();
}

【讨论】:

  • 如果我没记错的话,commons-io 库不使用 java.nio (至少,不是所有的动作)包,但 java.io。我这样说是因为您提到使用 java.nio 包,但后来您提到了 commons-io 库。我还推荐 java.nio 因为它比 java.io 具有更好的文件处理能力 - 我遇到了一些问题,主要是在读取名称中包含特殊字符的文件时 nio 处理没有问题。
【解决方案2】:

Files.createDirectories() 很容易做到这一点

Path source = Path.of("c:/dir/dir-x/file.ext");
Path target = Path.of("c:/target-dir/dir-y/target-file.ext");
Files.createDirectories(target.getParent());
Files.copy(path, target, StandardCopyOption.REPLACE_EXISTING);    

如果目录已经存在,请不要担心,在这种情况下,它什么也不做,继续运行......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2017-07-01
    • 2021-01-08
    • 2013-07-26
    • 1970-01-01
    • 2012-10-10
    • 2012-12-22
    相关资源
    最近更新 更多