无法读取 java 目录中的文件

Failed to read a file in a directory in java

我的项目结构是这样的:

我想通过x.java访问file.txt。我的代码:

    File file = new File("file.txt");
    Scanner sc = new Scanner(file);
    while (sc.hasNextLine())
        out += sc.nextLine();
    if (out.isEmpty()) out = "NOTHING";

但给我 NullPointerException。

如果此文件应该像 class 文件一样成为您的应用程序的一部分(因此,实际上是只读的,您可以将其与其他文件打包在一起。想想游戏的纹理贴图,或者用户界面的图标),请使用 getResourceAsStream,因为有问题的资源甚至可能不是文件(java 项目往往以 jars 形式发布,而 jar 中的条目不是文件!)。

如果没有,好吧,那就想办法将完整路径信息添加到您的代码中,因为它不会神奇地弄清楚您有一个包含“App”和“files”的目录结构,这是非标准。 (对于 java 文件,标准路径是 src/main/java/pkgname/Type.java,对于只需要存在(不需要编译)的资产,标准路径是 src/main/resources/pkgname/open.png

如果你根据这个结构在你最喜欢的IDE中建立一个项目,并使用例如配置maven 或 gradle,然后 getResourceAsStream 在开发时和运行时工作,即使资源在 jar 中也是如此。

基本上当你读取文件“file.txt”时,你不会提供绝对路径,所以操作系统会直接在当前文件中寻找文件。那是你的程序开始的地方。

我知道你没有在“files”文件夹中启动程序,而是在另一个文件夹中启动程序,比如“Project”文件夹。在这种情况下,要使用的路径将是“files/file.txt”。

我解决了!
首先,我使用了

            File directory = new File("./");
            System.out.println(directory.getAbsolutePath());

检测整个路径.. 然后我在 directory.getAbsolutePath() 后面加上文件名,这样它就变成了 directory.getAbsolutePath()+"file.txt"
我使用正常的方式通过使用扫描仪读取文件和 scanner.readLine() 读取文件 !
This answer

对我有帮助