(Java)使用.jar文件在URL和文件之间出现问题

时间:2018-01-24 04:44:11

标签: java file url jframe

我在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文件中,以便它可以独立运行?

感谢您的帮助!

1 个答案:

答案 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();
   }
}