FileReader不会读取列表中的第二个文件

时间:2018-05-27 17:27:34

标签: java filereader

我将两个文件放在目录中并进行测试,以查看我的代码是否可以搜索文件并找到匹配项,但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)

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)

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

action

您运行包含Main.class Main.java test dir |-- testfile.txt |-- testfile2.txt Main.classMain.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...
}