java - FileReader 不会读取列表中的第二个文件
问题描述
我将两个文件放在一个目录中并测试了我的代码是否可以搜索文件并找到匹配项,但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);
}
}
}
这是我的控制台的输出:
Enter the search term:
bla
Enter each file location:
test dir
Found Files:
testfile.txt
testfile2.txt
Unable to open file 'test dir'
错误的整个堆栈跟踪是:
无法打开文件 'testfile2.txt' java.io.FileNotFoundException:
testfile2.txt (No such file or directory) Enter the search term: at
java.io.FileInputStream.open0(Native Method) at
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)
请帮忙。谢谢你。
解决方案
在我看来,您好像具有以下文件夹结构:
Main.class
Main.java
test dir
|-- testfile.txt
|-- testfile2.txt
Main.class
您从包含和Main.java
的目录运行代码test dir
。然后,您的代码列出目录中的文件test dir
,找到其中包含的两个文本文件,然后尝试从当前目录打开它们。这是父目录,当然,这不是这些文件所在的位置。它们位于子目录中test dir
。因此, AFileNotFoundException
是意料之中的:您正试图在错误的目录中打开文件。
如果 FileReader 恰好在两个文件中的第二个上失败,那么testfile.txt
父目录中是否也有一个文件?您的代码很可能是第一次通过循环打开此文件,而不是test dir
您认为的那个文件。
要打开test dir
子目录中的文件,请替换该行
fileReader = new FileReader(files[f1]);
和
fileReader = new FileReader(new File(dir, files[f1]));
推荐阅读
- python - 定义的函数在调用时抛出“未定义”的 NameError
- asp.net - 使用 cpanel 发布 ASP.NET 项目时出错
- sql - Athena 中带有 % 符号的列的数据类型
- python - 在 python 中混合两个图像以不丢失强度
- java - 如果标签的内容包含>或<,你将如何在java中解析xml?
- firebase - 如何在 Flutter 中从 Firestore 获取错误
- airflow - 新的 DAG 没有赶上错过的时间表(schedule_interval 是一个 cron)
- state - 有人可以为我提供一些技巧,告诉我如何在 Flink 中实现给定的分布式流算法吗?
- r - RStudio 在粘贴到 IDE 时截断长字符串 - 解决方法?
- c# - 在列表框中逐行读取文件