再次陷入困境。
我正在递归地搜索目录并通过检查其扩展名来挑选音频文件。一旦找到,每个都将被添加到 JList(在主类中 - 此处未显示)。但是,只有最后一个文件夹的文件被添加到列表中。这是代码:
public void List(String path) throws InterruptedException, IOException {
File root = new File(path);
File[] list = root.listFiles();
DefaultListModel lm = new DefaultListModel();
if (list == null) {
return;
}
for (File f : list) {
if (f.isDirectory()) {
List(f.getAbsolutePath());
} else if (f.isFile()) {
String outPath = f.getAbsolutePath();
try {
String ext = outPath.substring(outPath.lastIndexOf(".") + 1);
if (ext.equals("wma") || ext.equals("m4a") || ext.equals("mp3")) {
lm.addElement(f.getAbsolutePath());
}
} catch (Exception e) {
System.out.println(outPath + " is not a valid file!!!!!");
}
HomeScreen.Library.setModel(lm);
}
}
}
我尝试用简单的 System.out.println(f.getAbsolutePath)
替换 lm.addElement(f.getAbsolutePath())
并且所有文件都是按预期打印出来。我还尝试将 HomeScreen.Library.setModel(lm);
移动到不同的区域,但这通常会导致列表中根本没有添加任何内容。
我认为必须发生的是,每次找到新文件夹时,列表模型都会以某种方式重置,并且文件会添加到现在为空的模型中。
有办法解决这个问题吗?我是否在代码中做了一些愚蠢的事情导致了这种明显的重置?
提前非常感谢,
盖伊
最佳答案
问题在于您在每次调用 List()
方法时都会创建一个新的 DefaultListModel
。这解释了为什么你这么认为
each time a new folder is found, the list model is reset, somehow, and the files are added to the now empty model
我认为您想将文件添加到同一个 DefaultListModel
中,因此在 List()
方法之外创建它,然后将其作为参数传递或将其设为List()
可以访问的实例字段。
关于java - 递归地将文件添加到 JList - 仅添加最后一个文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740352/