首页 > 解决方案 > 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)

请帮忙。谢谢你。

标签: javafilereader

解决方案


在我看来,您好像具有以下文件夹结构:

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]));

推荐阅读