我将两个文件放在目录中并进行测试,以查看我的代码是否可以搜索文件并找到匹配项,但Deque
不会读取第二个文件。这是我的代码和我的控制台条目。我已将错误范围缩小到FileReader
,但我不知道如何解决这个问题。
FileReader
这是我的控制台的输出:
public class Main
{
public static void searchEngine(String dir, String Search)
{
File folder = new File(dir);
String[] files = folder.list();
Integer f1 = 0;
FileReader fileReader;
ArrayList linematches;
BufferedReader bufferedReader;
Integer q;
String line;
Integer linenum;
System.out.println("Found Files:");
for (String file : files) {
System.out.println(file);
}
try {
for (String file : files) {
linematches = new ArrayList();
fileReader = new FileReader(files[f1]);
bufferedReader = new BufferedReader(fileReader);
linenum = 0;
while ((line = bufferedReader.readLine()) != null) {
linenum += 1;
if (line.contains(Search)) {
linematches.add(linenum);
}
}
q = 0;
for (int i = 0; i < linematches.size(); i++) {
System.out.println("File: " + file + " Line: " + linematches.get(i));
}
linematches.removeAll(linematches);
// Always close files.
bufferedReader.close();
f1++;
}
} catch (FileNotFoundException ex) {
System.out.println("Unable to open file '" + dir + "'");
} catch (IOException ex) {
System.out.println("Error reading file '" + dir + "'");
}
}
public static void main(String[] args)
{
while (true) {
System.out.println("Enter the search term: ");
Scanner scanner = new Scanner(System.in);
String searchterm = scanner.nextLine();
System.out.println("Enter each file location: ");
String f1 = scanner.nextLine();
searchEngine(f1, searchterm);
}
}
}
错误的整个堆栈跟踪是:
无法打开文件&#39; testfile2.txt&#39; java.io.FileNotFoundException:
testfile2.txt(无此类文件或目录)输入搜索词:at java的java.io.FileInputStream.open0(Native Method) java.io.FileInputStream.open(FileInputStream.java:195)在 java.io.FileInputStream。(FileInputStream.java:138)在 java.io.FileInputStream。(FileInputStream.java:93)在 java.io.FileReader。(FileReader.java:58)在 com.mangodev.Main.searchEngine(Main.java:32)在 com.mangodev.Main.main(Main.java:70)
请帮忙。谢谢。
答案 0 :(得分:0)
在我看来,好像你有以下文件夹结构:
action
您运行包含Main.class
Main.java
test dir
|-- testfile.txt
|-- testfile2.txt
,Main.class
和Main.java
的目录中的代码。然后,您的代码会列出目录test dir
中的文件,找到它包含的两个文本文件,然后尝试从当前目录打开它们。这是父目录,当然,这不是这些文件所在的位置。它们位于子目录test dir
中。因此需要test dir
:您尝试在错误的目录中打开文件。
如果FileReader在两个文件中的第二个上发生故障,那么父目录中是否还有文件FileNotFoundException
?您的代码可能是第一次在循环中打开此文件,而不是您认为它是testfile.txt
中的那个。
要打开test dir
子目录中的文件,请替换
test dir
与
fileReader = new FileReader(files[f1]);
答案 1 :(得分:0)
在searchEngine
方法的第一行中,您创建了一个包含目录中文件的变量folder
。我建议直接在for循环中使用此变量而不是字符串文件名。
for (File file : folder.listFiles()) {
linematches = new ArrayList();
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
//rest of code...
}