我对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 */
}
Path dir = oldFile.getParent();
Path fn = oldFile.getFileSystem().getPath(newNameString);
Path target = (dir == null) ? fn : dir.resolve(fn);
oldFile.moveTo(target);
请注意,它检查parent是否为空(看起来您的解决方案不这样做)。
Path newName(Path oldName, String newNameString) {
return Files.move(oldName, oldName.resolveSibling(newNameString));
}
首先,我们使用Path.resolveSibling()获取新文件名的路径然后我们使用Files.move()进行实际的重命名。
// 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"));
因此,在您的示例中,moveto路径应为
/home/me/file456