如何从特定给定目录和所有子目录中搜索具有特定扩展名的文件

时间:2014-01-14 01:04:05

标签: java file

仅仅是为了我自己的学习,我试图找到我的音乐收藏中的所有mp3文件,并找到所有没有id3v2标签的曲目。我的代码给了我有关我指定的目录的信息,但它不查找子目录中的mp3文件。虽然我可以看到它识别目录,因为我可以打印出来。请参阅下面的代码。如果代码的格式不正确,我很抱歉。我是盲人,使用屏幕阅读器,我不能轻易访问本网站上的格式化程序。

public static int numberOfUntaggedTracks(String directory) throws UnsupportedTagException, InvalidDataException, IOException {
    int untaggedTracks = 0;
    File f = new File(directory);
    File l[] = f.listFiles();
    for (File x: l) {
    if (x.isHidden() || !x.canRead())
        continue;
    if (x.isDirectory()) {
        System.out.println("testing" + x.getPath());
        numberOfUntaggedTracks(x.getPath());
    } else if (x.getName().endsWith(".mp3")) {
        Mp3File song = new Mp3File(x.getPath());

        if (song.hasId3v1Tag() == false) {
        untaggedTracks++;
        }
        //end of else if checking for .mp3 extension                
    }
    //end of for loop
    }
    return untaggedTracks;
}

1 个答案:

答案 0 :(得分:0)

来自apatche commons-io的FileUtils有一个listFiles方法,可以满足你的需要。

该方法需要两个IOFileFilter实例,您可以使用这些实例来过滤文件(在您的情况下为mp3文件)并过滤子目录(这样您就可以控制在搜索中包含哪些目录)。

要使代码正常工作,只需将numberOfUntaggedTracks(x.getPath());更改为untaggedTracks += numberOfUntaggedTracks(x.getPath());

即可