导出的 Jar 文件不会读取 jar 中的文件
Exported Jar file won't read file inside 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 文件夹中。我注意到一件事可能表明问题所在。
- 在我的打印语句中,我注意到 javaFile.jar 部分末尾有一个感叹号。那是对的吗?这是否表明文件或结构存在问题?
此外,以防万一有人对我应该如何加载文件有更好的建议,我会告诉你我的意图。我想从 jar 中的相对位置(图像文件夹)加载文件。我想显示它(已在我的实际代码中完成)并存储位置以稍后传递给另一个函数(也已完成)。
您应该尝试检查您的 class 是否与 jar 中的图像位于同一目录中。
|
|- Your class
|- Images
|- questionMark.png
此外,您是否尝试过直接使用您的 url 对象?
File file = new File(url);
试试这个
public void test() {
try(InputStream is = getClass().getResourceAsStream("Images/questionMark.png")) {
ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
}
}
在下面的代码示例中,当我在 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 文件夹中。我注意到一件事可能表明问题所在。
- 在我的打印语句中,我注意到 javaFile.jar 部分末尾有一个感叹号。那是对的吗?这是否表明文件或结构存在问题?
此外,以防万一有人对我应该如何加载文件有更好的建议,我会告诉你我的意图。我想从 jar 中的相对位置(图像文件夹)加载文件。我想显示它(已在我的实际代码中完成)并存储位置以稍后传递给另一个函数(也已完成)。
您应该尝试检查您的 class 是否与 jar 中的图像位于同一目录中。
|
|- Your class
|- Images
|- questionMark.png
此外,您是否尝试过直接使用您的 url 对象?
File file = new File(url);
试试这个
public void test() {
try(InputStream is = getClass().getResourceAsStream("Images/questionMark.png")) {
ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
}
}