如何巧妙地提取子路径以解决 java 上的根文件夹和无根文件夹的问题
How do I extract subpath neatly accounting for root and no root folders on java
我有一个 Path 对象和一个 String 对象,Path 对象表示文件名表示的起始路径的一部分
例如,对于文件名 /Music/Beatles/Help.mp3,Path 对象可能是
/
/Music
/Music/Beatles
这个简单的方法returns路径部分减去基本文件夹
public String getPathRemainder(Path path, String filename)
{
if(baseFolder.getNameCount()==0)
{
return song.getFilename().substring(baseFolder.toString().length());
}
else
{
return song.getFilename().substring(baseFolder.toString().length()+File.separator.length());
}
即
Music/Beatles/Help.mp3
Beatles/Help.mp3
Help.mp3
但是虽然简单但它相当混乱,因为我必须考虑这样一个事实,即如果基本文件夹是根文件夹,它以“/”结尾(在 unix 上)而不是 none 根路径。
我确定有更简洁的方法,但我看不到它。
使用 java.nio 自 Java 7:
Path file = Paths.get("/Music/Beatles/Help.mp3");
Path dir1 = Paths.get("/");
Path dir2 = Paths.get("/Music");
Path dir3 = Paths.get("/Music/Beatles");
System.out.println(dir1.relativize(file));
System.out.println(dir2.relativize(file));
System.out.println(dir3.relativize(file));
你得到:
Music/Beatles/Help.mp3
Beatles/Help.mp3
Help.mp3
我有一个 Path 对象和一个 String 对象,Path 对象表示文件名表示的起始路径的一部分
例如,对于文件名 /Music/Beatles/Help.mp3,Path 对象可能是
/
/Music
/Music/Beatles
这个简单的方法returns路径部分减去基本文件夹
public String getPathRemainder(Path path, String filename)
{
if(baseFolder.getNameCount()==0)
{
return song.getFilename().substring(baseFolder.toString().length());
}
else
{
return song.getFilename().substring(baseFolder.toString().length()+File.separator.length());
}
即
Music/Beatles/Help.mp3
Beatles/Help.mp3
Help.mp3
但是虽然简单但它相当混乱,因为我必须考虑这样一个事实,即如果基本文件夹是根文件夹,它以“/”结尾(在 unix 上)而不是 none 根路径。
我确定有更简洁的方法,但我看不到它。
使用 java.nio 自 Java 7:
Path file = Paths.get("/Music/Beatles/Help.mp3");
Path dir1 = Paths.get("/");
Path dir2 = Paths.get("/Music");
Path dir3 = Paths.get("/Music/Beatles");
System.out.println(dir1.relativize(file));
System.out.println(dir2.relativize(file));
System.out.println(dir3.relativize(file));
你得到:
Music/Beatles/Help.mp3
Beatles/Help.mp3
Help.mp3