0
我剛剛使用Swing - 我有一個遞歸方法,它遍歷硬盤驅動器上的目錄,並且當前打印出音樂曲目 - 我想將曲目添加到數組列表中,以便我可以將完整列表發送到JPanel並在那裏顯示...如何在每個文件夾遞歸調用方法時停止清除數組列表?由於遞歸方法的ArrayList
我剛剛使用Swing - 我有一個遞歸方法,它遍歷硬盤驅動器上的目錄,並且當前打印出音樂曲目 - 我想將曲目添加到數組列表中,以便我可以將完整列表發送到JPanel並在那裏顯示...如何在每個文件夾遞歸調用方法時停止清除數組列表?由於遞歸方法的ArrayList
我不知道我理解你的代碼,所以我會從頭開始,給你一些僞代碼:
private List<File> getAllAudioFiles(File folder) {
List<File> result = new ArrayList<>();
// you want a single list. There should be no other list creation in the algorithm.
addAllAudioFiles(folder, result);
return result;
}
private void addAllAudioFiles(File folder, List<File> result) {
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
// call this method recursively, to add all the audio files in the subfolder
// to the SAME list
addAllAudioFiles(file, result);
}
else if (isAudioFile(file)) {
result.add(file);
}
}
}
試試下面的代碼
public class MusicGetter {
ArrayList<String> tlist = new ArrayList<>();
MusicGetter(String c) {
addToList(c);
}
private void addToList(String s) {
File root = new File(s);
File[] files = root.listFiles();
for (File f : files) {
String str = f.getPath();
if (str.endsWith(".mp3") || str.endsWith(".wav") || str.endsWith(".flac") || str.endsWith(".m4a") || str.endsWith(".ogg") || str.endsWith(".wma")) {
tlist.add(str);
}
if (f.isDirectory()) {
addToList(f.getPath().toString());
}
}
}
public static void main(String[] args) {
MusicGetter mg = new MusicGetter("E:\\audios");
for (int i = 0; i < mg.tlist.size(); i++) {
System.out.println(mg.tlist.get(i));
}
}
}
代碼中沒有ArrayList(至少它不清晰可見),也沒有調用'clear'方法。你應該發佈一個更完整的例子。 – assylias
你可能會創建一個新的ArrayList與每個方法調用,從而覆蓋以前的?但是你需要向我們展示代碼。 – Zyga
爲了清晰起見,添加了其餘的代碼,謝謝:) – brainZap