【问题标题】:Exporting a runnable JAR that includes the source folder of your project, as well as all other folders?导出包含项目源文件夹以及所有其他文件夹的可运行 JAR?
【发布时间】:2017-09-29 22:10:52
【问题描述】:

我正在尝试导出到具有以下结构的项目的可运行 JAR:

Project
   |
   |---Source folder
   |         |
   |         |
   |     .java files
   |
   |
   |---Image folder
             |
             |
         .png files

.png 图像是使用 ImageIO.read(new File("ImageFolder/image.png"));.java 文件中读取的,当我在 Eclipse 中运行该程序时工作正常,但如果我导出到可运行的 JAR,我会在堆栈跟踪中得到以下异常:

javax.imageio.IIOException: Can't read input file!                                                              
        at javax.imageio.ImageIO.read(Unknown Source) 

这是我在 Eclipse 中的项目截图:

如何在我的 JAR 中包含 cardImages 文件夹以便读取 new File("cardImages/10C.png")

【问题讨论】:

  • 您是否尝试过将 cardImages 设为源文件夹?
  • 随目录导出,使用流读取图片文件,getClass().getResourceAsStream('cardmages/imagename').
  • @Ray 无论如何都是临时修复,但下面的答案绝对是正确的方法
  • 看看这里。 stackoverflow.com/questions/13937904/…。真的这是最糟糕的做法。

标签: java eclipse file-io jar


【解决方案1】:
  • 右键单击您的项目
  • 选择“构建路径”=>“配置构建路径...”
  • 在新打开的窗口中检查您的“cardImages”文件夹

它应该被提取到你的罐子里。

只是提示,对于资源更喜欢使用

    InputStream is = ClassLoader.getSystemResourceAsStream("resources/sample.txt");

【讨论】:

  • 那么写一张图片呢?我的程序正在从cardImages 文件夹加载图像,使用它加载的图像创建一个新图像,然后将新图像写回到cardImages ClassLoader.getSystemResourceAsStream 只能用于读取,因为它返回一个 InputStream跨度>
  • 在jarfile里面写文件肯定有hack,但是不建议在运行时修改jar,可能会遇到很多问题。如果您必须写入文件,最佳做法是在与 jar 相同的目录中创建一个文件夹,并在那里管理您的文件(例如放置配置文件或 cardImages)您可以通过以下方式完成:C:User/adom/documents/ jarName.jar!/fileName.txt 把“!”假设它是一个 jarfile 的字符。
【解决方案2】:

随目录导出,使用流读取图片文件,getClass().getResourceAsStream('cardmages/imagename');

通常可运行的 jar 文件,文件操作与其路径相关,在该路径中被执行。 例如

c:/myFolder>yourjar.jar

那么 您试图读取的文件,c:/myFolder/cardimages/imagename.

File 是一个用于从文件系统访问文件的类。不是来自罐子里。

【讨论】:

  • 所以我称之为ImageIO.read(getClass().getResourceAsStream('cardImages/10C.png');)
  • 我的程序也需要将图片写入到同一个文件夹中,类似的方法怎么做?
猜你喜欢
  • 2014-10-20
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多