我在java中制作了一个相当大的程序。它有很多文件,包括图像,音频和文本文件。当我从Eclipse运行时,我使用的代码工作正常。但是,我总是很难从.jar文件中获取对它们的访问权。
我将举例说明我是如何对此进行编码的。
对于BufferedImage,我有这样的方式:
File bgImgFile = new File("images/nature.jpg");
BufferedImage bgImg = ImageIO.read(bgImgFile);
对于AudioInputStream,我有:
File soundFile = new File("audio/two.wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
对于文本文件,我有:
FileReader reader = new FileReader("scripts/0.txt");
当我在Eclipse中时,这一切都很好。但是,我正在考虑我想要分发的内容。我希望有一个可以在任何地方运行的.jar文件,并且不需要与包含这些文件的文件夹位于同一目录中。我以前做过这件事并且工作正常。
这是我尝试为图像做的事情:
URL bgFileUrl = MainClass.class.getClassLoader().getResource("images/nature.jpg");
File bgImgFile = new File(bgFileUrl.getFile());
BufferedImage bgImg = ImageIO.read(bgImgFile);
我为音频和文本文件做了类似的事情。但是,即使我尝试将文件本身放在同一目录中的不同组合,在普通文件名前面有斜杠等,也没有任何效果。我希望能够将这些文件包含在.jar文件中,这样我就不必从该特定文件夹中运行.jar了。
我不明白的一点是,当我打开使用原始代码制作的.jar文件时,图像,音频和脚本文件夹就在那里,他们有我的文件。他们在那里。但是,当我尝试运行它时,我得到了一个IIOException(“无法读取输入文件!”)和一个NullPointerException,即使我使用的代码与以前相同。
如何将文件包含在.jar文件中,以便它可以独立运行?
感谢您的帮助!
答案 0 :(得分:0)
您可以尝试下面的代码
@Singleton
@Path("generate/")
public class ItineraryController {
private static final Logger log = LogManager.getLogger(ItineraryController.class);
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Itinerary getItinerary(ItineraryRequest request) {
log.info("Creating itinerary");
return createTestItinerary();
}
}