问题描述
我刚刚完成了一个小游戏,现在我想导出它,以便可以将其用作普通应用程序,可以从桌面启动。它正在工作,但是当它尝试读取.txt文件(我想在其中保存一些重要内容)时,它不再起作用。但是在IDE中它可以正常工作。我用Eclipse和IntelliJ进行了测试,但是得到的结果相同。
这就是我试图保存所有东西的方式。图片位于res文件夹中的文件夹中,该文件夹位于src文件夹中。这很好。我对saves文件夹中的文件尝试了同样的操作,该文件也位于src文件夹中,但是导出后它们无法正常工作。
BufferedReader read = new BufferedReader(new FileReader(getClass().getResource("/res/player/" + name + "/data.txt").getFile()));
我在互联网上找不到任何视频或其他信息,如何解决此问题。
解决方法
您可以尝试将全长路径传递给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")));
我也希望您利用try-with-resources来管理您的资源
另外,请注意,这样嵌入资源使它们变为只读。