我有一个像这样的文件路径:
/home/Dara/Desktop/foo/bar/baz/qux/file.txt
在Java中,我希望能够获得前两个文件夹。 IE浏览器。 baz/qux
,无论文件路径长度或操作系统如何(文件路径分隔符,例如/
:
和\
)。我曾尝试在subpath()
中使用Paths
方法,但我似乎无法找到获取文件路径长度的通用方法。
答案 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()
获取路径的每个部分。