java - 递归地将文件添加到 JList - 仅添加最后一个文件夹中的文件

标签 java file netbeans recursion jlist

再次陷入困境。

我正在递归地搜索目录并通过检查其扩展名来挑选音频文件。一旦找到,每个都将被添加到 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/

相关文章:

c# - C#中的布局管理器

java - 与 Windows Media Player 交互

c# - 监视文件的更改

c++ - "listening"到 C/C++ 中的文件更改(在 Windows 上)

c++ - 如何从文件中读取 "uneven"矩阵,并存储到二维数组中?

java - 获取 jcombobox 选中的项目

Java: getSelectedItem() 对于字符串类型未定义

java - 为什么在这种情况下编译器不能限制返回类型

netbeans - NetBeans 在哪里创建 Derby Embedded DB

java - 警告 : [rawtypes] found raw type: DefaultListModel