在Java中提取部分路径
我有这样一个文件路径:在Java中提取部分路径,java,file,path,filepath,Java,File,Path,Filepath,我有这样一个文件路径: /home/Dara/Desktop/foo/bar/baz/qux/file.txt 在Java中,我希望能够获得前两个文件夹。例如,baz/qux不考虑文件路径长度或操作系统(文件路径分隔符,如/:和\)。我曾尝试在路径中使用subpath()方法,但我似乎找不到一种通用的方法来获取文件路径的长度。您可以只使用字符串或使用字符串。文件。getParent()将删除文件名 使用路径分隔符:System.getProperty(“file.separator”) 然后,
/home/Dara/Desktop/foo/bar/baz/qux/file.txt
在Java中,我希望能够获得前两个文件夹。例如,baz/qux
不考虑文件路径长度或操作系统(文件路径分隔符,如/
:
和\
)。我曾尝试在路径中使用subpath()
方法,但我似乎找不到一种通用的方法来获取文件路径的长度。您可以只使用字符串或使用字符串。文件。getParent()
将删除文件名
使用路径分隔符:System.getProperty(“file.separator”)
然后,您可以使用
String.split()
获取路径的每个部分。还不太清楚,但是,您可以猜测方向:
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
,以使代码更加健壮。java.nio.Path的getnamecont()
和getName(int index)
方法应该可以帮助您:
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()
的结果用作getName()
的索引之前,应检查其有效性
Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);
使用
Path.subpath()
什么不起作用?使用Path.subpath(0,2)
会给我home/Dara
。我想说一些类似于Path.subpath(myPath.length()-3,myPath.length()-1
的话来获得baz/qux
。你不能用Path.getNameCount()
来计算长度吗?是的……我可以!谢谢。没错,我现在这样做了,但我会更习惯于使用更通用的方式。你说的更通用的方式是什么意思?