在Java中提取路径的一部分

Dar*_*ava 4 java file path filepath

我有这样的文件路径:

/home/Dara/Desktop/foo/bar/baz/qux/file.txt
Run Code Online (Sandbox Code Playgroud)

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

D.R*_*.R. 9

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

File parent = file.getParentFile();
File parent2 = parent.getParentFile();
parent2.getName() + System.getProperty("path.separator") + parent.getName()
Run Code Online (Sandbox Code Playgroud)

另外一个选项:

final int len = path.getNameCount();
path.subpath(len - 3, len - 1)
Run Code Online (Sandbox Code Playgroud)

编辑:您应该检查len或捕获它IllegalArgumentException以使您的代码更健壮.


Jue*_*elt 7

方法getNameCount()getName(int index)ofjava.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();
Run Code Online (Sandbox Code Playgroud)

请注意,在将 的结果getNameCount()用作 的索引之前,应检查其有效性getName()