我如何在Java 7中重命名(不移动)文件?

问题描述 投票:22回答:6

我对JDK7中的所有这些新文件I / O类有点困​​惑。

比方说,我有一个Path,想重命名它代表的文件。再次需要输入Path时,如何指定新名称?

Path p = /* path to /home/me/file123 */;
Path name = p.getName(); /* gives me file123 */
name.moveTo(/* what now? */); /* how to rename file123 to file456? */

注意:为什么需要JDK7符号链接

的处理

问题是:我必须对名称和位置在运行时已知的文件进行处理。因此,我需要的是一个[[safe方法(没有特殊的副作用)来创建一些旧名称路径的新名称路径。

Path newName(Path oldName, String newNameString){ /* magic */ }
java file-io path nio java-7
6个回答
8
投票
您有一个路径字符串,需要创建一个Path实例。您可以使用getPath方法执行此操作或解决。这是一种方法:

Path dir = oldFile.getParent(); Path fn = oldFile.getFileSystem().getPath(newNameString); Path target = (dir == null) ? fn : dir.resolve(fn); oldFile.moveTo(target);

请注意,它检查parent是否为空(看起来您的解决方案不这样做)。

60
投票
在JDK7中,Files.move()提供了简短的语法来重命名文件:

Path newName(Path oldName, String newNameString) { return Files.move(oldName, oldName.resolveSibling(newNameString)); }

首先,我们使用Path.resolveSibling()获取新文件名的路径然后我们使用Files.move()进行实际的重命名。

4
投票
确定,尝试了一切之后,看来我找到了正确的方法:

// my helper method Path newName(Path oldFile, String newNameString){ // the magic is done by Path.resolve(...) return oldFile.getParent().resolve(newNameString); } // so, renaming is done by: oldPath.moveTo(newName(oldFile, "newName"));


1
投票
[如果您查看Apache Commons IO,则有一个称为FileNameUtils的类。这会带来很多东西。文件路径名,并将(除其他事项外)可靠地分割路径名等。我认为这应该使您对想要的东西有很长的路要走。

0
投票
如果目标路径与源路径相同[[文件名除外,它将被重命名而不是移动。

因此,在您的示例中,moveto路径应为

/home/me/file456

-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.