file.getFileName()。endsWith()没有检测到.mp3

时间:2015-11-26 14:26:00

标签: java

我可能错过了一些小东西,但我找不到它。使用file.getFileName()。endsWith(“。mp3”),布尔值始终为false。如果我将te文件重命名为* .mp并将代码更改为endsWith(“。mp”),则会找到它们。这里发生了什么?

问候, Jelmew

编辑:文件是路径对象btw。

文件名:

/home/jelmer/Music/01 - Nightwish - Shudder Before The Beautiful.mp3
/home/jelmer/Music/02 - Nightwish - Weak Fantasy.mp3
/home/jelmer/Music/03 - Elan (Album Version).mp3
/home/jelmer/Music/04- Nightwish - Yours Is An Empty Hope.mp3
/home/jelmer/Music/05 - Nightwish - Our Decades In The Sun.mp3
/home/jelmer/Music/06 - Nightwish - My Walden.mp3
/home/jelmer/Music/07 - Nightwish - Endless Forms Most Beautiful.mp3
/home/jelmer/Music/08 - Nightwish - Edema Ruh.mp3
/home/jelmer/Music/09 - Nightwish - Alpenglow.mp3
/home/jelmer/Music/10 - Nightwish - Eyes Of Sharbat Gula.mp3
/home/jelmer/Music/11 - Nightwish - The Greatest Show on Earth.mp3
/home/jelmer/Music/test.mp3


public class mp3Walker extends SimpleFileVisitor<Path> {

    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        if(file.getFileName().endsWith(".mp3")) {
            System.out.println(file);
        }
        System.out.println("done with file: "+file.getFileName());
        return FileVisitResult.CONTINUE;
    }

    public static void main(String[] args) throws IOException {
        mp3Walker walker= new mp3Walker();
        Files.walkFileTree(Paths.get("/home/jelmer/Music/"), walker);
    }
}

输出:

done with file: 07 - Nightwish - Endless Forms Most Beautiful.mp3
done with file: test.mp3
done with file: 08 - Nightwish - Edema Ruh.mp3
done with file: 05 - Nightwish - Our Decades In The Sun.mp3
done with file: 02 - Nightwish - Weak Fantasy.mp3
done with file: 11 - Nightwish - The Greatest Show on Earth.mp3
done with file: 01 - Nightwish - Shudder Before The Beautiful.mp3
done with file: 10 - Nightwish - Eyes Of Sharbat Gula.mp3
done with file: 04- Nightwish - Yours Is An Empty Hope.mp3
done with file: 06 - Nightwish - My Walden.mp3
done with file: 03 - Elan (Album Version).mp3
done with file: 09 - Nightwish - Alpenglow.mp3

2 个答案:

答案 0 :(得分:11)

这是因为Path&#39; .endsWith()期望路径的完整元素。

那是:

Paths.get("foo").endsWith("oo")

相当于:

Paths.get("foo").endsWith(Paths.get("oo"))

总是返回false。

您想测试文件名的字符串值:

path.getFileName().toString().endsWith(".mp3")

答案 1 :(得分:0)

Path.getFileName()提供了一个Path对象 - 而不是String,正如您所期望的那样。 和Path.endsWith(String):

  

测试此路径是否以&#34; Path&#34;结束,通过转换给定的路径字符串构造,完全按照&#34; endsWith(Path)&#34;指定的方式。方法。例如,在UNIX上,路径&#34; foo / bar&#34;结束于&#34; foo / bar&#34; &&#34; bar&#34;。它不会以&#34; r&#34;或&#34; / bar&#34;

也许你需要处理&#34; toString&#34;表示:

file.getFileName()的toString()的endsWith(&#34; .MP3&#34)。