从 Runnable Jar 访问文件

Accessing Files From Runnable Jar

快速免责声明:我是 java 的新手,我知道这个问题已在其他线程中得到解答,但我无法理解那里的答案,所以我真的希望得到一个非常 simple/understandable请解释。

无论如何,我的问题是我正在使用 Eclipse 制作一个使用文本文件和图片的程序,当它通过 Eclipse 运行时,如果我尝试将它导出到 运行nable jar,我不能访问我的资源了。当前,当我从 Eclipse 中 运行 东西时,我的目录结构是:

Desktop -->
   workspace -->
      QuizProgram -->
                  bin
                  src
                  Questions.txt
                  right.png

我通过以下方式访问我的图像和文本文件:

BufferedReader br =  new BufferedReader(new FileReader("Questions.txt"));

BufferedImage right = ImageIO.read(new File("Right.png"));

如果有人愿意,我将逐步解释将我的 files/change 我的代码移至何处,我将不胜感激。我浏览了许多其他主题,Classpath/ClassLoader 真的让我感到困惑。我已经尝试了一些

this.getClass().getResource("File.txt");

东西也有,但似乎没有任何效果。请帮忙,我有一个完成的程序,最后一件事真的很令人沮丧,谢谢!

编辑 1:所以我尝试了 user2933977 的建议,并将 getResource 更改为 getResourceAsStream,一切都运行良好!非常感谢 user2933977 的帮助。

旁注:是的,是的,我知道这是重复的,但我认为你如何表达问题并与响应者互动无论如何都会有很大帮助。放轻松,我已经开始工作了。

您没有显示足够的代码,但要使用 getResource(),您的文件需要与 .class 文件位于同一目录中。例如,您可能有如下所示的内容:

Desktop -->
  workspace -->
    QuizProgram -->
      bin -->
        QuizProgram -->
          YourClass.class
      src -->
        QuizProgram -->
          YourClass.java 
      Questions.txt
      right.png

我在这里有点猜测,但这是 Eclipse 中的默认设置 "Java Project"。因此,将您的 Questions.txt 移动到与 .java 文件相同的目录,Eclipse 会为您将其移动到 classes 目录:

Desktop -->
  workspace -->
    QuizProgram -->
      bin -->
        QuizProgram -->
          YourClass.class
          Questions.txt <--- Eclipse moves this for you
      src -->
        QuizProgram -->
          YourClass.java 
          Questions.txt
      right.png

并且您将能够使用您编写的 getResource() 方法。

话虽如此,您最终会得到一个可以为您完成大部分工作的构建系统,但这应该能让您入门。