线程"main"java.io.FileNotFoundException异常:java.io.BufferedInputStream@73035e27(系统找不到指定的文件)

Exception in thread "main" java.io.FileNotFoundException: java.io.BufferedInputStream@73035e27 (The system cannot find the file specified)

我必须从 git 中的 \resource 文件中读取外部文件。我必须使用资源文件夹,因为我要与其他人共享项目,所以我们的 trainingData 文件路径会有所不同。我写道:

public static String trainingFile = Trainer.class.getClassLoader().getResourceAsStream("trainingData.txt").toString();

然后trainingFile要看,我写了:

FileInputStream fstream = new FileInputStream(trainingFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null)   
{
    fileNames.add(strLine);
}

当我 运行 这给了我错误: Exception in thread "main" java.io.FileNotFoundException: java.io.BufferedInputStream@73035e27 (The system cannot find the file specified) 到“FileInputStream fstream”行。 非常感谢您的帮助。

实际上 trainingFile 不是输入流和文件路径。你可以这样做:

InputStream trainingFile = Trainer.class.getClassLoader().getResourceAsStream("trainingData.txt");

    List<String> fileNames = new ArrayList<String>();
    BufferedReader br = new BufferedReader(new InputStreamReader(trainingFile));
    String strLine;
    while ((strLine = br.readLine()) != null)
    {
        fileNames.add(strLine);
        System.out.println(strLine);
    }

Trainer.class.getClassLoader().getResourceAsStream("trainingData.txt").toString() 会给你 return 一个类似 java.io.BufferedInputStream@7b1d7fff 的字符串,它不是你应该传递给 FileInputStream 的参数,它需要路径名。

您可以简单地将 InputStream 传递给 InputStreamReader

InputStream trainingFile = Trainer.class.getClassLoader().getResourceAsStream("trainingData.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(trainingFile));