2014-01-12 80 views
0

我刚刚使用Swing - 我有一个递归方法,它遍历硬盘驱动器上的目录,并且当前打印出音乐曲目 - 我想将曲目添加到数组列表中,以便我可以将完整列表发送到JPanel并在那里显示...如何在每个文件夹递归调用方法时停止清除数组列表?由于递归方法的ArrayList

+1

代码中没有ArrayList(至少它不清晰可见),也没有调用'clear'方法。你应该发布一个更完整的例子。 – assylias

+0

你可能会创建一个新的ArrayList与每个方法调用,从而覆盖以前的?但是你需要向我们展示代码。 – Zyga

+0

为了清晰起见,添加了其余的代码,谢谢:) – brainZap

回答

0

我不知道我理解你的代码,所以我会从头开始,给你一些伪代码:

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); 
     } 
    } 
} 
0

试试下面的代码

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)); 
    } 
    } 
}