导出的Jar文件不会读取jar内的文件

时间:2016-03-23 15:20:54

标签: java eclipse jar export

在下面的代码示例中,当我在Eclipse中测试代码时,它工作得很好。但是,当我导出jar文件并通过命令行测试它时,它会抛出一个错误:IIOException: Can't read input file!

private BufferedImage img = null;
private String imgSource;

if (img == null)
{
    try {
        URL url = getClass().getResource("Images/questionMark.png");
        System.out.println(url.getPath()); 
        /* This prints: file:/C:/Users/Keno/Documents/javaFile.jar!/javaFile/Images/questionMark.png */
        File file = new File(url.getPath());
        img = ImageIO.read(file);
        imgSource = file.getName();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我想要获取的文件位于javaFile包内的Images文件夹内。我注意到有一件事可能表明问题。

  1. 在我的print语句中,我注意到javaFile.jar部分末尾的惊叹号。那是对的吗?这可能表明文件或结构存在问题吗?
  2. 另外,如果有人对如何加载文件有更好的建议,我会告诉你我的意图。我想从jar中的相对位置(Images文件夹)加载文件。我想显示它(已经在我的实际代码中完成)并且还存储稍后要传递给另一个函数的位置(也已完成)。

2 个答案:

答案 0 :(得分:1)

试试这个

public void test() {
    try(InputStream is = getClass().getResourceAsStream("Images/questionMark.png")) {
        ImageIO.read(is);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

您应该尝试检查您的类是否与jar中的图像位于同一目录中。

   |
   |- Your class
   |- Images
       |- questionMark.png

另外,您是否尝试直接使用您的网址对象?

File file = new File(url);