如何提取子路径整齐地计算java上的root和无根文件夹

时间:2015-01-23 13:24:23

标签: java path nio2

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

例如文件名/Music/Beatles/Help.mp3,Path对象可能是

/
/Music
/Music/Beatles

这个简单的方法返回路径的一部分减去基础文件夹

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上)结束,但不是没有根路径。

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

1 个答案:

答案 0 :(得分:0)

使用自Java 7以来可用的java.nio

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