首页 > 其他分享 >classpath的jar包中读取文件

classpath的jar包中读取文件

时间:2023-07-26 16:46:10浏览次数:44  
标签:包中 文件 读取 jar xxx classpath file ClassPathResource

  • 在idea中读取resources下的文件没有问题(调用getFile),但是打成jar包就会出问题;
  • 使用spring的ClassPathResource或者hutool的ClassPathResource去解析文件都会有问题;
  • 但是使用上面两个工具去读取inputstream或者byte就没问题,因为内部都是调用ClassLoader的getResource方法,如果是文件,那么就是file://xxx,如果是jar包那么就会是jar:file://xxx;
  • 因为如果是读取文件,那么路径就是file://xxx,但是在jar包中就不存在这东西,只会存在jar:file://xxx。读取inputstream或者byte最终会被解析成url方式读取(调用url的openStream方法),url方式读取就可以读取到file://xxx或者jar:file://xxx,读取文件就不行
  • 所以遇到这种问题的时候不要试图去读取文件,而是要读取inputstream或者bytes
  • 有3种方式可以实现:1. 手动去使用ClassLoader获取,2. 使用spring的ClassPathResource,3. 使用hutool的ClassPathResource
  • 推荐:hutool的ClassPathResource,因为代码量少,并且不用捕获异常,hutool封装了ResourceUtil,使用getResourceObj或者readBytes方法都可以
  • 注意:文件名前不需要加classpath:,也不用加/这种绝对路径:
    • 错误示范:Resource resource = ResourceUtil.getResourceObj("classpath:/config/a.xlsx");
    • 正确示范:Resource resource = ResourceUtil.getResourceObj("config/a.xlsx");

标签:包中,文件,读取,jar,xxx,classpath,file,ClassPathResource
From: https://www.cnblogs.com/dreamroute/p/17582887.html

相关文章

  • 修改jar 配置文件
    解压jar包修改配置文件添加MANIFEST.MF并打成jar包(注意不压缩)执行jar包//复制jar包cp/data/single/job/champion-job-single-sms-1.0/champion-job-single-sms-1.0.jar.//解压jar包jar-xvfchampion-job-single-sms-1.0.jar//修改配置文件cdconfigs/vimdb.si......
  • Maven:把本地Jar包引入到SpringBoot项目中
    实现把jar包放到项目中如libs:在pom.xml中的dependencies中引入Jar包:<dependency><groupId>com.aventstack</groupId><artifactId>extentreports</artifactId><version>3.0.6</version>......
  • idea打包springboot项目,打包成war包,如何不把lib目录或指定jar打进去?
    1、在pom.xml文件中添加如下配置:<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>......
  • 本地jar包导入maven
    1.本地jar包导入到maven库  在本项目目录内,pom.xml同级目录下,在cmd命令窗口执行(可选)mvninstall:install-file-Dfile=""(jar包的位置)-DgroupId=""groupId(分组)-DartifactId=""artifactId(jar名称)-Dversion=""version(版本号)-Dpackaging=jar-DgeneratePom=tr......
  • SLF4J: Class path contains multiple SLF4J bindings报错,logback-classic.jar与slf4j
    1.问题:控制台一直报错: 1SLF4J:ClasspathcontainsmultipleSLF4Jbindings.2SLF4J:Foundbindingin[jar:file:/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]3SLF4J:Foundbindingin[jar:file:/slf4j/slf4j-log......
  • TCP灌包中RTT时延与RTO超时关系
    TCP的RTT算法从前面的TCP重传机制我们知道Timeout的设置对于重传非常重要。设长了,重发就慢,丢了老半天才重发,没有效率,性能差;设短了,会导致可能并没有丢就重发。于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。而且,这个超时时间在不同的网络的情况下,根......
  • idea 在springboot添加本地jar包的方法
    虽然现在Maven很方便,但还是会有一些jar是不开源的,也就是说在Maven仓库中是下载不到的,比如对接阿里云、通联等,这个时候就需要我们手动将这些jar包下载下来,然后手动添加到我们的项目中1、先下载好自己需要的jar包,如下: 2、在SpringBoot中的resources目录新建一个lib目录,将这些ja......
  • 对java被引用的jar包加密
    对Java被引用的JAR包加密在Java开发过程中,我们经常引用各种第三方库的JAR包来实现各种功能。然而,有时我们希望对这些被引用的JAR包进行加密,以保护代码的安全性和知识产权。本文将介绍如何对Java被引用的JAR包进行加密,并提供相关的代码示例。为什么需要加密JAR包Java的JAR包是一......
  • Q:jar包启动脚本备份
    jarServer.sh#!/bin/bash#APP_NAME必须配置。cd`dirname$0`cd..DEPLOY_DIR=`pwd`APP_HOME=$DEPLOY_DIR/libLOG_FILE=$DEPLOY_DIR/logs/stdin.out#启动的程序名称APP_NAME=digmax-ta404.jar#配置文件生产环境#PROFILE=pro#java虚拟机启动参数JAVA_OPTS="-Xms1......
  • android studio统一管理jar
    AndroidStudio统一管理jar作为一名经验丰富的开发者,你需要教会新手开发者如何在AndroidStudio中统一管理jar文件。下面将详细介绍整个流程,包括每一步需要做的事情以及相应的代码。流程概述为了统一管理jar文件,我们将使用AndroidStudio的依赖管理工具Gradle。通过Gradle,我们可......