9

我有这样的文件路径:

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

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

4

5 回答 5

11

还不漂亮,但是,你猜方向:

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 或 catchIllegalArgumentException以使您的代码更健壮。

于 2013-03-14T13:24:28.380 回答
5

方法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()

于 2013-03-14T13:39:38.230 回答
3

使用子路径和 getNameCount。

    Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
    Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);
于 2017-09-24T10:18:32.320 回答
2

您可以只split使用 String 或使用StringTokenizer.

于 2013-03-14T13:21:59.167 回答
1

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

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

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

于 2013-03-14T13:23:44.910 回答