【问题标题】:Accessing Files From Runnable Jar [duplicate]从可运行 Jar 访问文件 [重复]
【发布时间】:2015-11-28 12:55:46
【问题描述】:

快速免责声明:我对 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 的帮助。

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

【问题讨论】:

  • 您可以保持文件相对于 jar(在同一文件夹中)并像往常一样使用标记文件名的字符串参数访问文件
  • 我真的很想把所有东西都放在罐子里,你有什么建议吗?还是谢谢!
  • 如果您希望它包含在 jar 中,您必须在系统上存储某种类型的 Config 变量。看this post
  • 无意冒犯,但你确定吗?因为我已经设法将我的 .txt 文件打包到我的 jar 中并且访问它们是我真正的问题。也许我错了,但我认为没有配置文件是可能的,对吧?
  • 你肯定可以打包它们,但是访问 jar 中的文件是真正的问题。相对路径将始终更改而不对类加载器进行任何修改

标签: java jar embedded-resource executable-jar


【解决方案1】:

您没有显示足够的代码,但要使用 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

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

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

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 2015-04-21
    • 1970-01-01
    • 2016-09-30
    • 2013-02-21
    • 2012-01-05
    • 1970-01-01
    • 2013-07-14
    • 2018-04-13
    相关资源
    最近更新 更多