javax.imageio.IIOException: Can't create cache file!

博客详细介绍了当外网TOMCAT下的temp目录被误删后,出现的javax.imageio.IIOException错误。通过在TOMCAT根目录创建temp目录,成功解决了问题。分享了解决此类文件系统问题的经验。

javax.imageio.IIOException: Can't create cache file!
at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:361)
at javax.imageio.ImageIO.read(ImageIO.java:1351)
at com.banksteel.erp.web.common.utils.ImageUploadUtils.scale(ImageUploadUtils.java:112)
at com.banksteel.erp.web.common.utils.ImageUploadUtils.abscut(ImageUploadUtils.java:56)
at com.banksteel.erp.web.admin.controller.AdminController.upload(AdminController.java:157)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

 

 

BufferedImage bi = ImageIO.read(new File(oldfile));

报错:

查阅资料发现是因为外网TOMCAT下的temp目录被删了,(由于前段时间怀疑缓存导致项目发布后依旧读的是旧的配置, 很苦逼的一段时间)问题找到了,所以呢, 管理员进入TOMCAT目录,在TOMCAT根目录(与bin目录同级)创建temp目录,再刷新页面,OK
### 可能的原因分析 `javax.imageio.IIOException: Can't read input file!` 是 Java 中常见的异常之一,通常发生在尝试通过 `ImageIO.read()` 方法加载图像文件时失败的情况下。这种问题可能由多种原因引起: 1. **文件路径不正确**:如果指定的文件路径不存在或者指向了一个无效的位置,则会抛出此异常[^5]。 2. **权限不足**:即使文件存在,但如果程序运行时没有足够的权限访问该文件也会引发同样的错误[^4]。 3. **文件损坏或格式不受支持**:目标文件可能是损坏的或者是 ImageIO 不支持的某种特殊格式[^1]。 ### 解决方案 #### 验证并修正文件路径 确认所提供的文件路径绝对无误非常重要。如果是相对路径,需确保它相对于当前工作目录是有效的。可以通过打印 `System.getProperty("user.dir")` 来查看应用程序启动时的工作目录位置,并据此调整路径设置。 ```java String currentDir = System.getProperty("user.dir"); System.out.println("Current working directory is " + currentDir); ``` #### 检查文件是否存在以及可读性 在调用 `ImageIO.read(File)` 前先验证 File 对象表示的实际资源确实可用且具有读取权限。 ```java File imageFile = new File("/path/to/your/image.jpg"); if (!imageFile.exists()) { throw new FileNotFoundException("The specified image does not exist."); } if (!imageFile.canRead()) { throw new SecurityException("You do not have permission to read the specified image."); } ``` 上述代码片段可以帮助识别因缺失或不可达而导致的问题。 #### 使用合适的图像处理库 虽然标准 JDK 提供了基本功能来操作常见类型的图形文件,但对于某些特定格式的支持有限。遇到这种情况可以考虑引入第三方类库比如 Apache Commons Imaging 或者 Thumbnailator 这些更强大的工具集作为替代解决方案。 另外,在实际开发过程中还应该注意捕获潜在的 I/O 错误以便更好地调试和维护应用逻辑[^3]: ```java try { BufferedImage img = ImageIO.read(new File("/path/to/file")); } catch (IIOException e) { logger.error("Failed to load image due to an IO issue.", e); } catch (IllegalArgumentException ex){ logger.warn("Invalid argument supplied when attempting to open image resource",ex ); } finally{ // Cleanup resources here if necessary. } ``` 以上方法能够有效减少此类异常的发生概率同时提高系统的健壮性和用户体验满意度。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值