使用Java NIO重命名非空目录问题

4
根据:如何使用JDK7重命名(而不是移动)文件? 我正在尝试使用Java NIO重命名非空文件夹的文件夹名称。
我的结果是,新目录已创建但内部没有文件,并且旧目录未被删除。
以下是我使用的代码,但它不起作用:
  try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
      Path oldPath = fs.getPath("/some/directory2");
      Files.move(oldPath, oldPath.resolve("/some/directory_replaced2_2"), StandardCopyOption.REPLACE_EXISTING);
 } catch (IOException e) {
            e.printStackTrace();
        }

我缺少什么?(我只想重命名文件夹)


很有趣,如果我只是这样做 Path oldPath = Paths.get("/Users/me/Desktop/Folder"); Files.move(oldPath, oldPath.resolve("/Users/me/Desktop/Folder2"), StandardCopyOption.REPLACE_EXISTING); 这个可以正常工作。 - Eugene
将其他文件添加到 /Users/me/Desktop/Folder 内。 - VitalyT
没错,那个文件夹不是空的,它里面有文件和带有文件的子文件夹。 - Eugene
你如何初始化FileSystem uri,FileSystems.newFileSystem(uri,env)? - VitalyT
再看一遍我的例子。我没有初始化它,因为我不需要。 - Eugene
显示剩余2条评论
1个回答

3
您可以使用java.nio.file.Files.move方法重命名目录,然后使用Files.walkFileTree复制文件:

移动文件树可能涉及复制而不是移动目录,可以使用copy方法与Files.walkFileTree实用程序方法一起完成。

您可以参考Java教程

import static java.nio.file.StandardCopyOption.*;

Files.move(source, target, REPLACE_EXISTING);

the method is most often used with the file tree recursion mechanism. For more information, see Walking the File Tree.


1
@user7294900,你能举个例子吗? - VitalyT
@VitalyT 在 Java 教程中添加了一个示例。 - user7294900

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接