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

在下面的代码示例中,当我在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部分末尾的惊叹号。 那是对的吗? 这可能表明文件或结构存在问题吗?

此外,万一有人对如何加载文件有更好的建议,我会告诉你我的意图。 我想从jar中的相对位置(Images文件夹)加载文件。 我想显示它(已经在我的实际代码中完成)并且还存储稍后要传递给另一个函数的位置(也已完成)。

试试这个

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

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

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

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

 File file = new File(url);