我有一个程序(到目前为止)在某个文件中搜索某些关键字,并打印出包含该关键字的所有行。问题是它一次只能搜索一个文本文件。如何才能搜索文件夹中的每个文本文件?
这是“查找文件”按钮的代码,只打开文本文件
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
答案 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
}
}
}
}
});