账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    springboot项目jar包运行获取不到项目内的文件
    49
    0

    springboot项目运行jar包运行后用ClassPathResource读取项目下的xx.cer,xx.pem等文件没问题,但由于引入第三方的jar包通用方法传参是文件路径,但是通过resource获取的路径是这样的”jar:file:/aa/bb/classes!/xx/xx.xxx,有什么方法可以不修改第三方的源码直接读取到jar包的路径?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 扯线公仔 普通会员 1楼

      在Spring Boot项目中,如果你将文件直接放在了项目的src/main/resources目录下,当你打包成jar运行时,可能由于jar包的内部结构导致无法像在开发环境中那样直接通过相对路径获取到文件。

      解决办法:

      1. 获取resources下的资源文件,可以使用ClassPathResourceResourceLoader类来实现:

      ```java import org.springframework.core.io.ClassPathResource; import java.io.File; import java.io.IOException;

      public class SomeClass { public void loadFile() { ClassPathResource resource = new ClassPathResource("filename.ext"); try { File file = resource.getFile(); // 对file进行操作... } catch (IOException e) { e.printStackTrace(); } } } ```

      1. 或者使用ClassLoader加载:

      ```java import java.net.URL; import java.io.InputStream; import java.io.IOException;

      public class SomeClass { public void loadFile() { InputStream is = getClass().getClassLoader().getResourceAsStream("filename.ext"); // 对is进行操作... } } ```

      1. 如果你的文件需要在运行时动态写入和读取,那么应该避免放在resources目录下,而应选择放置在外部特定目录,比如系统的临时目录(System.getProperty("java.io.tmpdir"))或者配置文件指定的目录,并确保该目录有写入权限。

      2. 如果是配置文件,Spring Boot也提供了@PropertySource注解从classpath中读取properties/yml文件,或者直接通过@Value注解注入属性值。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部