我有这样的文件路径:
/home/Dara/Desktop/foo/bar/baz/qux/file.txt
在 Java 中,我希望能够获得前两个文件夹。IE。baz/qux无论文件路径长度或操作系统(文件路径分隔符,如/ :和\)。我曾尝试使用该subpath()方法,Paths但似乎找不到通用方法来获取文件路径的长度。
还不漂亮,但是,你猜方向:
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以使您的代码更健壮。
方法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()。
使用子路径和 getNameCount。
Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);
您可以只split使用 String 或使用StringTokenizer.
File.getParent()将删除文件名。
以及您将获得的路径分隔符:System.getProperty("file.separator").
然后你可以使用String.split()获取路径的每一部分。