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

2022-09-02 00:07:04

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

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

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符号链接的处理!

问题是:我必须对在运行时知道名称和位置的文件执行此操作。因此,我需要的是一种安全的方法(没有特殊的副作用)来创建一些旧名称路径的新名称路径。

Path newName(Path oldName, String newNameString){
    /* magic */ 
}

答案 1

在 JDK7 中,Files.move() 为重命名文件提供了简短明了的语法:

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

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


答案 2

您有一个路径字符串,您需要创建一个 Path 实例。您可以使用 getPath 方法执行此操作或解析。这是一种方法:

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

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