Java project可以在IDE中读取txt文件,但不是';导出项目后不工作

Java project可以在IDE中读取txt文件,但不是';导出项目后不工作,java,bufferedreader,Java,Bufferedreader,我刚刚完成了一个小游戏,现在我想导出它,这样我就可以将它作为一个普通的应用程序使用,我可以从我的桌面开始。它正在工作,但是当它试图读取.txt文件时,我想在其中保存一些重要的东西,它不再工作了。但在IDE中,它正在工作。我用Eclipse和IntelliJ对它进行了测试,但得到了相同的结果 这就是我试图拯救一切的方式。图片位于res文件夹中的文件夹中,res文件夹位于src文件夹中。这很好用。我对saves文件夹中的文件做了同样的尝试,该文件夹也在src文件夹中,但导出后它们不起作用 Buff

我刚刚完成了一个小游戏,现在我想导出它,这样我就可以将它作为一个普通的应用程序使用,我可以从我的桌面开始。它正在工作,但是当它试图读取.txt文件时,我想在其中保存一些重要的东西,它不再工作了。但在IDE中,它正在工作。我用Eclipse和IntelliJ对它进行了测试,但得到了相同的结果

这就是我试图拯救一切的方式。图片位于res文件夹中的文件夹中,res文件夹位于src文件夹中。这很好用。我对saves文件夹中的文件做了同样的尝试,该文件夹也在src文件夹中,但导出后它们不起作用

BufferedReader read = new BufferedReader(new FileReader(getClass().getResource("/res/player/" + name + "/data.txt").getFile()));
这就是我试图读取文本文件的代码


我在internet上找不到任何视频或其他信息,如何解决此问题。

您可以尝试将完整路径传递给BufferedReader

出乎意料地:

String path = System.getProperty("java.class.path");
然后从那里建立你的位置。 如果不起作用,请查看此处:

[https://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file][1]
那就试试看

BufferedReader bin = new BufferedReader(NewFileInputStream( [path] ) );
哦,而且,直接查看api可能比搜索视频和教程更快。这些程序通常会运行半个小时,最终你浪费了你的时间,而实际上你只需要一行代码

https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html
图片位于res文件夹中的文件夹中,该文件夹位于src文件夹中

这表明,当您“导出”项目时,
res
文件夹的内容被捆绑到结果Jar中

这是一种通常称为“嵌入式资源”的方法,其中资源“嵌入”到应用程序/Jar中

由于Jar只是一个zip文件,您将无法像访问磁盘上的文件一样访问这些资源,因为它们不是

相反,您需要直接使用生成的
URL
,或者根据需要使用
Class#getResourceAsStream

这意味着,不是

BufferedReader read = new BufferedReader(new FileReader(getClass().getResource("/res/player/" + name + "/data.txt").getFile()));
你应该使用更像

BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/res/player/" + name + "/data.txt")));
我也希望你正在利用这些资源来管理你的资源


另外,请注意,像这样嵌入资源会使它们成为只读的。

不能将“嵌入资源”视为文件,而是需要直接使用生成的
URL
来读取resource@MadProgrammer哦,哇,它工作得很好,那是我第一次使用堆栈溢出,我想,我现在要更多地使用它,这真的很有帮助。感谢这是一个相当普遍的问题,但除非你理解它是什么,否则要找到解决问题的方法并不容易。很高兴我们能帮上忙这是不是意味着我不能再把文本写入文件了?我应该在哪里保存它们好吧,这是一个更复杂的问题。因为,本质上,每个操作系统都有一个“应用程序支持”的概念,在这个概念中,应用程序可以轻松地向其写入数据,通常基于当前用户。这使得位置“稳定”,相对容易访问,避免了操作系统现在应用的许多安全漏洞。因此,我是否应该让程序创建文件夹和文本文件,一旦它第一次在计算机上启动,然后我可以将其保存在AppData文件夹中,因为用户无法删除或意外更改它?啊,这是你需要做出的决定。您可以“提取”嵌入的资源并将其存储在“众所周知的位置”,或者,如果不重要的话,在程序首次启动时创建这些资源,您将根据您想要实现的目标来选择