无法读取 java 目录中的文件
Failed to read a file in a directory in java
我的项目结构是这样的:
- 项目
- 应用程序
- x.java
- 文件
- file.txt
- main.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
对我有帮助
我的项目结构是这样的:
- 项目
- 应用程序
- x.java
- x.java
- 文件
- file.txt
- file.txt
- main.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
对我有帮助