Java 导出包含项目源文件夹以及所有其他文件夹的可运行JAR?
我正在尝试导出到具有以下结构的项目的可运行JAR:Java 导出包含项目源文件夹以及所有其他文件夹的可运行JAR?,java,eclipse,file-io,jar,Java,Eclipse,File Io,Jar,我正在尝试导出到具有以下结构的项目的可运行JAR: Project | |---Source folder | | | | | .java files | | |---Image folder | | .png files 使用ImageIO.read(新文件(“ImageFolder/image.png”))在.java文件中读取.pn
Project
|
|---Source folder
| |
| |
| .java files
|
|
|---Image folder
|
|
.png files
使用ImageIO.read(新文件(“ImageFolder/image.png”))在.java
文件中读取.png
图像
当我在Eclipse中运行程序时,它可以正常工作,但是如果我导出到可运行的JAR,我会在stacktrace中得到以下异常:
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
以下是我在Eclipse中的项目截图:
如何将cardImages
文件夹包含在我的JAR中,以便可以读取新文件(“cardImages/10C.png”)
InputStream is = ClassLoader.getSystemResourceAsStream("resources/sample.txt");
使用目录导出,使用流读取图像文件,
getClass()代码>
通常可运行的JAR,文件操作与它的路径是真实的,在那里它变得异常。
前
然后
您试图读取的文件,c:/myFolder/cardimages/imagename。
File是用于从文件系统访问文件的类。不是从罐子里。你试过将cardmages作为源文件夹吗?使用目录导出,使用流getClass()读取图像文件。getResourceAsStream('cardmages/imagename')。@Ray作为临时修复程序,但下面的答案肯定是正确的方法请看这里。实际上,这是最糟糕的做法。因此我将其称为ImageIO.read(getClass().getResourceAsStream('cardImages/10C.png');)
我的程序也需要将图像写入同一文件夹,如何以类似的方式完成此操作?然后编写图像怎么样?我的程序正在从cardImages
文件夹加载一个图像,使用加载的图像创建一个新图像,然后将新图像写入cardImages
只能用于读取,因为它返回一个InputStream。JAR文件中必须有一个hack do write文件,但不建议在运行时修改jar,因为您可能会遇到许多问题。如果您必须编写文件,最好的做法是在jar所在的目录中创建一个文件夹,并在那里管理您的文件(如放置配置文件或cardImages),您可以通过以下方式完成:C:User/adom/documents/jarName.jar/fileName.txt将“!”字符设为JAR文件。
c:/myFolder>yourjar.jar