如何提取java上根文件夹和无根文件夹的子路径

如何提取java上根文件夹和无根文件夹的子路径,java,path,nio2,Java,Path,Nio2,我有一个Path对象和一个String对象,Path对象表示文件名表示的起始路径的一部分 e、 g对于文件名/Music/Beatles/Help.mp3,路径对象可能是 / /Music /Music/Beatles 这个简单的方法返回路径减去basefolder的部分 public String getPathRemainder(Path path, String filename) { if(baseFolder.getNameCount()==0) {

我有一个Path对象和一个String对象,Path对象表示文件名表示的起始路径的一部分

e、 g对于文件名/Music/Beatles/Help.mp3,路径对象可能是

/
/Music
/Music/Beatles
这个简单的方法返回路径减去basefolder的部分

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());
    }
i、 e

但是,虽然很简单,但它相当混乱,因为我必须解释这样一个事实:如果基本文件夹是根文件夹,那么它以“/”结尾(在unix上),而不是无根路径

我确信有一种更简洁的方法,但我看不到。

使用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));
你会得到:

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