引用JAR中的文件

时间:2012-07-16 12:03:08

标签: java eclipse file jar structure

我正在为某些串口通信创建一个Java应用程序,在应用程序的文件夹中,我有两个需要在运行时出现的资源。第一个是用作启动画面的图像,另一个是在程序启动时需要读取的配置文件。

以下是Linux中“tree”命令输出的删节版本,我需要引用的两个文件是“commandSet.config”和“splash-screen2.png”

.
├── bin
│   ├──...
├── commandSet.config
├── app-manifest.txt
├── splash-screen2.png
└── src
    ├── events
    │   └── InterfaceEvents.java
    ├── models
    │   ├── Command.java
    │   └── Phone.java
    ├── operations
    │   ├── Application.java
    │   ├── ...
    └── views
        ├── CallDialog.java
        ├── SplashScreen.java
        └── Window.java

我目前正在引用以下几行:

BufferedReader in = new BufferedReader(new FileReader("commandSet.config"));

JLabel image = new JLabel(new ImageIcon("splash-screen2.png"));

当我从Eclipse运行它时,这很好用,但是一旦我导出到可运行的JAR,文件就不会被移动,因此没有被正确引用。我已经尝试将它们移动到“src”文件夹中,这导致它们在JAR中存档,但我仍然无法引用它们。

我对导出Java项目的概念很陌生,所以也许我错过了一些明显的东西。如果有人能告诉我这样做的最佳方法以及未来项目文件系统的最佳方法,我将非常感激。干杯!

3 个答案:

答案 0 :(得分:3)

 InputStream in = this.getClass().getClassLoader().getResourceAsStream("splash-screen2.png");  
byte[] buffer = new byte[in.available()];
in.read(buffer);  
ImageIcon icon = new ImageIcon(buffer);

答案 1 :(得分:1)

您无法像在文件系统中那样访问该文件。

使用上下文中的getResourceAsStream()使用类加载器从CLASSPATH中读取它。

答案 2 :(得分:0)

好吧,我疯狂地解决这个问题,并认为我将来会给别人一个答案。我基本上遵循“duffymo”的指导方针,这就是我所做的:

  • 使用我的资源创建了一个JAR。
  • 将该JAR放入项目的 root
  • 使用Eclipse将JAR添加到构建路径。
  • 使用getResourceAsStream(“ /nameOfFile.ext ”)获取资源的流。

干杯!