Java 从Runnable Jar访问文件

Java 从Runnable Jar访问文件,java,jar,embedded-resource,executable-jar,Java,Jar,Embedded Resource,Executable Jar,快速免责声明:我对java非常陌生,我知道这个问题已经在其他线程中得到了回答,但我无法理解那里的答案,所以我真的希望得到一个非常简单/可以理解的解释 无论如何,我的问题是,我正在使用Eclipse制作一个使用文本文件和图片的程序,当它通过Eclipse工作时,如果我试图将其导出到一个可运行的jar中,我将无法再访问我的资源。当前,当我从Eclipse运行东西时,我的目录结构是: Desktop --> workspace --> QuizProgram -->

快速免责声明:我对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:所以我尝试了用户2933977的建议,并将getResource更改为getResourceAsStream,一切都非常顺利!非常感谢你的帮助


旁注:是的,是的,我知道这是一个重复,但我认为你如何表达一个问题,并与回应者互动,无论如何都有很大帮助。别紧张,我已经让它工作了。

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

Desktop -->
  workspace -->
    QuizProgram -->
      bin -->
        QuizProgram -->
          YourClass.class
      src -->
        QuizProgram -->
          YourClass.java 
      Questions.txt
      right.png
我在这里有点猜测,但这是Eclipse中默认的“Java项目”。因此,将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
桌面-->
工作区-->
QuizProgram-->
垃圾箱-->
QuizProgram-->
你的班级
Questions.txt
QuizProgram-->
YourClass.java
Questions.txt
right.png
您将能够在编写getResource()方法时使用它


话虽如此,您最终将获得一个构建系统,该系统将为您完成大部分工作,但这应该会让您开始。

您可以将文件保留在与jar相关的位置(在同一个文件夹中),并像平常一样使用标记文件名的字符串参数访问文件。我非常希望所有内容都包含在jar中,你对此有什么建议吗?无论如何谢谢你!如果希望它包含在jar中,那么必须在系统上存储某种类型的配置变量。别生气,但你确定吗?因为我已经设法将我的.txt文件打包到我的jar中,访问它们才是我真正的问题。也许我错了,但是我认为没有配置文件是可能的,对吗?你可以肯定地打包它们,但是访问jar中的文件才是真正的问题。相对路径将始终更改,而不会对类加载器进行任何修改