Java文件路径转为目录路径

4

假设有以下文件路径:

Path filePath; // "/Users/me/Desktop/archive.zip"

我希望有一个函数能够将文件路径转换为目录路径,即删除其文件扩展名,并将文件路径视为目录路径。例如:
Path dirPath = asDirectoryPath(filePath); // "/Users/me/Desktop/archive"

我尝试了什么?

嗯,我有一个解决方案,但我认为它有点丑陋:

private Path asDirectoryPath(Path filePath)
{
    return Paths.get(path.toString().substring(0, path.toString().lastIndexOf('.')));
}

为什么说丑呢?因为我被迫执行将路径转换为字符串并查找'.'符号,假设接下来的字符是文件扩展名。这个函数应该是可移植的,并且应该在Windows和Unix系统中都能工作。是否有更正确的解决方案?谢谢。


1
http://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FilenameUtils.html#removeExtension%28java.lang.String%29 - jspcal
1
尝试使用dirPath.getParent()。 - Aman Chhabra
如果文件没有扩展名,应该怎么处理?您认为这是一个文件还是目录? - soufrk
@soufrk 好的,我的代码假设filePath是一个有效的文件路径,并检查Files.isRegularFile(),因此如果提供的路径无效、格式不正确或不存在该文件(或提供的filePath是目录路径),它可以返回null或抛出异常。 - Netherwire
2个回答

1

可以使用正则表达式与 split 方法一起使用。

path.toString().split("\\.")[0])

1
你可以使用java.nio中的Path类的getParent()方法,对于指向文件的Path对象,该方法会返回包含该文件的文件夹的Path对象。如果给定的Path对象是一个文件夹,则会返回其父文件夹的Path对象,如果没有父文件夹则返回null。
Path dirPath = filePath.getParent();

你的方法应该看起来像这样:
private Path asDirectoryPath(Path filePath) {
    return Paths.get(filePath.getParent());
}

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