Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中提取部分路径_Java_File_Path_Filepath - Fatal编程技术网

在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()
来计算长度吗?是的……我可以!谢谢。没错,我现在这样做了,但我会更习惯于使用更通用的方式。你说的更通用的方式是什么意思?