从Runnable Jar访问文件

时间:2015-09-02 20:54:39

标签: java jar embedded-resource executable-jar

快速免责声明:我对java很新,我知道这个问题已在其他主题中得到解答,但我无法理解那里的答案,所以我真的希望一个非常简单/可理解的请解释。

无论如何,我的问题是我使用Eclipse制作一个使用文本文件和图片的程序,当它通过Eclipse工作时,如果我尝试将它导出到一个可运行的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"));

如果有人可以请我给我一步一步解释我的文件移动/更改我的代码我会非常感激。我查看了很多其他线程,Classpath / ClassLoader让我很困惑。我试过了一些

this.getClass().getResource("File.txt");
东西也似乎没什么用。请帮助,我有一个完成的程序,这最后一件事真的很令人沮丧,谢谢!

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

旁注:是的,是的,我知道这是重复的但我认为你如何表达问题并与响应者互动有助于提供很多帮助。放轻松,我开始工作了。

1 个答案:

答案 0 :(得分:-1)

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

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

我在这里猜测一下,但这是默认的" Java Project"在Eclipse中。因此,将您的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()方法。

话说回来之后,你最终会找到一个可以为你做很多事情的构建系统,但这应该可以让你开始。