使用 FileReader Class 从位置 Java 读取文件

Use FileReader Class to read file from location Java

我正在使用 FileReader class 尝试访问同一目录中的 .txt 文件。我让它工作的唯一方法是使用从用户开始的目录路径。

值得注意 - 我在 Mac

上使用 intellij 社区版

代码

Scanner inFile = new Scanner(new FileReader("/Users/tuckerbeauchamp/Desktop/Java-Class/Famous Scientist/src/com/names.txt"));

仅使用 "names.txt"

时出现错误
Exception in thread "main" java.io.FileNotFoundException: names.txt (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at java.io.FileReader.<init>(FileReader.java:58)
    at com.FamousCS.main(FamousCS.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

如果文本文件与源文件位于同一目录中,则当您 运行 程序时,文本文件将在 class 路径中可用。因此,您可以使用 Class 加载程序访问该文件:

InputStream stream = FamousCS.class.getClassLoader().getResourceAsStream("/com/names.txt");
Scanner scanner = new Scanner(stream);

如果文件与class在同一目录下,只需将

Scanner inFile = new Scanner(new FileReader("names.txt"));

也可以。无需通过 class 加载程序和所有加载文件。

同样在类似的情况下,也可以使用 File.getAbsolutePath() 来检查正在查看文件的确切位置。 .