如何在JDK7中重命名(不移动)文件?

jav*_*top 22 java file-io nio path java-7

我对JDK7中所有这些新的File 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? */
Run Code Online (Sandbox Code Playgroud)

注意:为什么我需要JDK7?处理符号链接!

问题是:我必须使用文件,在运行时已知名称和位置.所以,我需要的是一种安全的方法(没有特殊的副作用)来创建一个新名称-Path一些旧名称Path.

Path newName(Path oldName, String newNameString){
    /* magic */ 
}
Run Code Online (Sandbox Code Playgroud)

Avn*_*ner 58

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

Path newName(Path oldName, String newNameString) {
    return Files.move(oldName, oldName.resolveSibling(newNameString));
}
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

Path dir = oldFile.getParent();        
Path fn = oldFile.getFileSystem().getPath(newNameString);
Path target = (dir == null) ? fn : dir.resolve(fn);        
oldFile.moveTo(target); 
Run Code Online (Sandbox Code Playgroud)

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