如何使用JFileChooser搜索文件夹中的所有文件

时间:2015-01-23 05:12:51

标签: java jfilechooser

我有一个程序(到目前为止)在某个文件中搜索某些关键字,并打印出包含该关键字的所有行。问题是它一次只能搜索一个文本文件。如何才能搜索文件夹中的每个文本文件?

这是“查找文件”按钮的代码,只打开文本文件

        findFileButton.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            JFileChooser fileChoice = new JFileChooser();
            fileChoice.setFileSelectionMode(JFileChooser.FILES_ONLY);

            int returnVal = fileChoice.showOpenDialog(AdminPanel.this);

            if (returnVal == JFileChooser.APPROVE_OPTION)
            {
                File file = fileChoice.getSelectedFile();
                wantedFile = file.getAbsolutePath();

            }
        }
    });

我尝试将fileSelectionMode切换到FILES_AND_DIRECTORIES,但是当我点击一个文件夹时,它会触发我的try / catch找不到/指定的文件。

有任何帮助吗? 谢谢, 〜Zmyth

2 个答案:

答案 0 :(得分:1)

首先,使用FILES_AND_DIRECTORIES时,您将获得一个文件OR目录。您需要使用File.isDirectory检查类型以确定您应该执行的操作。如果它是一个目录,那么你需要列出其中的所有文件并根据需要进行处理,如果它是一个文件,你只需要正常处理它。

如果您只希望用户能够选择目录,则可以使用DIRECTORIES_ONLY

搜索目录......

你可以......

使用File#listFiles方法之一列出所选目录中的所有文件。

这将只列出当前目录的文件,如果你想进行递归搜索,你需要自己实现,但不是很难

你可以......

使用Files#walkFileTree可以用来遍历当前目录和子目录,具体取决于您对FileVisitor的编码方式

有关详细信息,请参阅Walking the File Tree

答案 1 :(得分:0)

很抱歉,如果我原来的问题不清楚,我不知道如何搜索文件夹中的文件而不仅仅是文件。虽然在一个答案的帮助下,我最终能够得到它。我会投票,但我还没有足够的声誉。这就是我想要的:

findFileButton.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            JFileChooser fileChoice = new JFileChooser();
            fileChoice.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int returnVal = fileChoice.showOpenDialog(Panel.this);

            if (returnVal == JFileChooser.APPROVE_OPTION)
            {
                File folder = fileChoice.getCurrentDirectory();
                File[] listOfFiles = folder.listFiles();

                for (int i = 0; i < listOfFiles.length; i++)
                {
                    if (listOfFiles[i].isFile())
                    {
                        wantedFilesList.add(listOfFiles[i].getAbsolutePath());
                        currentFilesList.add(listOfFiles[i].getName());
                    }
                    else if (listOfFiles[i].isDirectory())
                    {
                        // Blerg
                    }
                }

            }
        }
    });