gpt4 book ai didi

java - 在java动态web项目中找不到图像

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:58 24 4
gpt4 key购买 nike

我有以下问题:

我创建了应该绘制动态图的 servlet。在绘图过程中,它应该从另一个目录获取图片并将其绘制在另一个图像上。一切都应该正常工作:

try {
BufferedImage temp = ImageIO.read(new File("image/arrow.png"));
tempIm = temp.getScaledInstance(55, 55, Image.SCALE_SMOOTH);
} catch (IOException e) {

e.printStackTrace();

}

但它打印以下内容:

严重:javax.imageio.IIOException:无法读取输入文件!
在 javax.imageio.ImageIO.read(ImageIO.java:1275)
在CertificateDraw.doGet(CertificateDraw.java:36)

我尝试以所有可能的方式更改文件对象的路径,但它只是给出了相同的问题,即使图像的一部分仍然发送到浏览器。所以问题出在 ImageIO.read 部分 - 我怎样才能找到它不加载图像的原因?!

我正在 Eclipse 中工作 - servlet 位于 src 文件夹中。该图像位于 rot 目录“WebContent”下的“image”文件夹中。

最佳答案

java.io.File 中的相对路径是相对于当前工作目录 (CWD) 的。这是启动 Java 运行时环境(在您的例子中为 Web 服务器)的命令时当前打开的文件夹。在 Eclipse 中启动服务器时,这通常是项目的 /bin 文件夹。您可以通过打印 new File(".").getAbsolutePath() 来计算。

但是您根本不应该依赖 File 中的相对路径。 CWD 无法从代码内部控制。

由于它已经在 webcontent 文件夹中,只需通过 ServletContext#getResourceAsStream() 获取它相反。

InputStream input = getServletContext().getResourceAsStream("/image/arrow.png");
BufferedImage image = ImageIO.read(input);
// ...

请注意 getServletContext()继承自 HttpServlet 扩展的 GenericServlet 类,因此您不需要自己提供该方法。

关于java - 在java动态web项目中找不到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com