在Java中提取路径的一部分

时间:2013-03-14 13:20:21

标签: java file path filepath

我有一个像这样的文件路径:

/home/Dara/Desktop/foo/bar/baz/qux/file.txt

在Java中,我希望能够获得前两个文件夹。 IE浏览器。 baz/qux,无论文件路径长度或操作系统如何(文件路径分隔符,例如/ :\)。我曾尝试在subpath()中使用Paths方法,但我似乎无法找到获取文件路径长度的通用方法。

5 个答案:

答案 0 :(得分:9)

然而,还不是很漂亮,你猜测方向:

File parent = file.getParentFile();
File parent2 = parent.getParentFile();
parent2.getName() + System.getProperty("path.separator") + parent.getName()

另一种选择:

final int len = path.getNameCount();
path.subpath(len - 3, len - 1)

编辑:您应该检查len或抓住IllegalArgumentException以使您的代码更健壮。

答案 1 :(得分:4)

getNameCount()的方法getName(int index)java.nio.Path可以为您提供帮助:

File f = new File("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
Path p = f.toPath();
int pathElements = p.getNameCount();
String topOne = p.getName(pathElements-2).toString();
String topTwo = p.getName(pathElements-3).toString();

请注意,在将getNameCount()用作getName()的索引之前,应检查{{1}}的结果是否有效。

答案 2 :(得分:2)

使用subpath和getNameCount。

    Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
    Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);

答案 3 :(得分:1)

您只需split字符串或使用StringTokenizer

答案 4 :(得分:1)

File.getParent()将删除文件名。

您将获得的路径分隔符:System.getProperty("file.separator")

然后,您可以使用String.split()获取路径的每个部分。