2014-01-14 169 views
0

僅用於我自己的學習,我試圖在我的音樂收藏中查找所有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; 
} 
+0

遞歸使用文件過濾 – Rugal

回答

0

apatche commons-io的FileUtils有一個listFiles方法,該方法應該能夠滿足您的需求。

該方法需要兩個IOFileFilter實例,您可以用來過濾文件(您的案例中的MP3文件)和篩選子目錄(以便您可以控制要在搜索中包含哪些目錄)。

爲了使您的代碼的工作只是改變numberOfUntaggedTracks(x.getPath());untaggedTracks += numberOfUntaggedTracks(x.getPath());

+0

但我已經聽到的,你能解釋爲什麼它不工作?我可以看到它打印出目錄,所以它不應該再次在目錄上運行相同的方法嗎? – user3192316

+0

你做得對,但你缺少一個將numberOfUntaggedTracks(x.getPath())的結果添加到untaggedTracks的簡單步驟。 –

+0

啊。我假設,因爲該方法重新運行,當它到達其他如果發現所有以.mp3結尾的文件,它將它添加到untaggedTracks變量。那麼這是否每次遇到目錄時都會運行該方法的新實例?如果這沒有意義,我很抱歉。 – user3192316

相關問題