我有这样的文件路径:
/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()
获取路径的每一部分。