当前位置: 首页 > 知识库问答 >
问题:

getClass()。getResource()不适用于。txt文件?

壤驷高旻
2023-03-14

背景:我正在写一个游戏(作为一个可执行的罐子),我的游戏的一部分是一个偏好对话框,你可以在其中设置对手的名字和影响游戏进展的不同变量。我决定这将是很好的,如果这些被保存在退出,所以下一次你加载的应用程序,它会记得你之前设置了什么。

为此,我将变量写入jar中的一个txt文件,然后在启动新游戏时读取该文件。通过eclipse,这一切都可以正常工作,但当我导出到jar时,它根本不起作用。这是我用来读取文件的代码。它在一个名为“Util”的类中,并在其他地方调用,但我尝试在需要它的地方创建非静态方法,并使用getClass()而不是Util。课堂上,我仍然没有运气:

public static List<String> getListFromFile()
{
    URI fileUri = null;

    try 
    {
        fileUri = Util.class.getResource("/gameplayPreferences.txt").toURI();
        LoggingDialog.append("\nFileUri is " + fileUri, true);
    } 
    catch (URISyntaxException e) 
    {
        e.printStackTrace();
        LoggingDialog.append(e.toString(), true);
    }

    Path gameplayPreferencesPath = Paths.get(fileUri);
    LoggingDialog.append("\ngameplayPreferencesPath is " + gameplayPreferencesPath, true);
    Charset charset = Charset.forName("US-ASCII");
    try 
    {
        List<String> list = Files.readAllLines(gameplayPreferencesPath, charset);
        return list;
    }
    catch (IOException x) 
    {
        x.printStackTrace();
        LoggingDialog.append(x.toString(), true);
    }

    return null;
}

LoggingDialog是我用来帮助我找出问题发生的地方。在这种情况下,我看到“FileUri是rsrc: gameplayPreferences.txt”,没有进一步的内容,所以我假设当我试图将其转换为路径时,我得到了一个NPE或类似的东西。

gameplayPreferences.txt文件位于一个名为“资源”的单独资源文件夹中,该文件夹位于我的构建路径的顶部。我不明白的是,我也有图像文件在这里,当我使用getClass(). getResources()创建图像图标这是正常工作-我可以导出到jar和所有的图像显示正确。那么,当我导出到jar时,为什么使用相同的方法会中断txt文件,以及如何修复它?

共有1个答案

田嘉澍
2023-03-14

为此,我将变量写入jar中的一个txt文件

因此修改jar是不正确的。您需要使用其他工具来存储用户偏好、保存的游戏数据、分数等。

一种方法是使用Preferences API。查看在java应用程序中保存用户设置的最佳方法是什么?更多信息。

 类似资料:
  • 我遵循了使用加载资源文件的方式。代码片段在这里: 我已经在eclipse中用层次结构对其进行了配置(在source下有一个名为SwingDemo的文件夹。在SwingDemo中有我的java文件和资源文件)。。。 src公司 当我在eclipse上运行它时,一切都运行正常。但是一旦我尝试从cmd行运行应用程序,就会发生空指针异常。 命令行部署层次结构如下: 文件夹:

  • 当我尝试从eclipse中的资源目录加载一个图像时,我总是得到一个空指针异常(null pointer exception,NPE)。res文件夹位于项目目录中。这是我得到NPE的地方: 当我移除getClass().getReource()时,将返回图像: 当我打印res目录的URL时,我得到null: 谢谢

  • 我的问题是关于以下代码示例: 我查看了Java-API,发现ImageIO类中有3种不同的read()方法: 1.: read(文件输入) 2.:读取(ImageInputStream) 3.:读取(输入流输入) 4.: read(URL输入) 我的问题是:在这个例子中使用了这四种方法中的哪一种?我有点困惑,因为在这个例子中 “getClass()”在这里返回“BufferedImageLoade

  • 问题内容: 线 失败于 我正在使用Eclipse,并且在bin文件夹下的导航视图中有文件gate_and.png,表明该文件位于构建路径中。 在包浏览器视图中,我有 和 我右键单击项目文件夹>构建路径>链接源以将images文件夹添加为源,再次执行此操作会提供一条确认消息,指出源中已存在图像。 我还尝试过将gate_and.png更改为images / gate_and.png和/images/g

  • 这是层次结构: Dz.BilaldJago.HomeKode.MainApp.java dz.bilaldjago.homekode.view.rootlayout.fxml 结果是一样的。有什么想法吗