java jar包找不到静态文件 报错URI is not hierarchical

java jar包找不到静态文件 报错URI is not hierarchical

InputStream stream = new ClassPathResource("template1/统计.xlsx").getStream();

使用上述方法获取文件或流的时候,会报错 URI is not hierarchical

原因
当前类和当前文件不在同一个jar包里面,方法会去当前类的根目录下面寻找 template1 文件夹

解决办法
1.移动文件至当前类的resources文件目录下(根目录)
2.指定类的位置 (我不喜欢用,因为找目录不喜欢)

InputStream stream = new ClassPathResource("template1/统计.xlsx",c.class).getStream();
### Java 中 `java.lang.IllegalArgumentException: URI is not hierarchical` 的解决方案 当遇到 `java.lang.IllegalArgumentException: URI is not hierarchical` 错误时,通常是因为尝试通过不支持的操作来处理特定类型的 URI。对于这种情况,有几种常见原因和相应的解决办法。 #### 原因分析 1. **路径解析问题** 尝试创建文件对象时使用的字符串可能无法被解释为有效的分层 URI。这可能是由于路径格式不对或是因为程序试图在一个不允许的地方操作文件系统[^4]。 2. **资源加载方式不当** 如果是在读取位于 JAR 文件内部的资源,则不应使用 `File` 类来进行访问,而是应该采用适合于类路径资源的方式获取输入流[^2]。 3. **HTTP请求配置失误** 对于某些框架如 Spring Boot,在设置外部服务调用 URL 时如果指定了相对路径而非完整的绝对路径也可能引发此类异常[^5]。 #### 解决方案建议 ##### 方法一:修正本地文件系统的路径表达形式 确保所提供的路径能够形成合法的分层结构,并且确实指向存在的位置: ```java import java.io.File; public class Main { public static void main(String[] args){ String path = "/absolute/path/to/your/resource"; // 使用绝对路径代替相对路径 File file = new File(path); System.out.println(file.exists()); } } ``` ##### 方法二:正确加载 ClassPath 下的资源 针对被打JAR 文件内的资源,推荐利用 `ClassLoader.getResourceAsStream()` 或者其他类似的 API 来替代直接实例化 `File` 对象的做法: ```java InputStream inputStream = getClass().getClassLoader() .getResourceAsStream("template/LZGICAD1.mdb"); if (inputStream != null) { try { // 处理 InputStream... } finally { inputStream.close(); } } else { throw new RuntimeException("Resource not found!"); } ``` ##### 方法三:调整 HTTP 请求中的 URL 设置 确认所有的远程接口调用都提供了完整的、含协议部分(比如 http:// 或 https://)在内的全限定域名作为目标地址。 #### 注意事项 - 当应用程序被打并部署到不同环境中测试或生产环境时,务必验证所有涉及文件 I/O 和网络通信的部分是否仍然正常工作。 - 需要特别注意区分开发阶段与实际运行环境下资源配置的不同之处,尤其是在构建工具自动管理依赖关系的情况下更应如此。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值