Jar包找不到文件路径问题

Jar包找不到文件路径问题,第1张

将字体文件放在 java 程序 resources 资源文件下加载,ThreadcurrentThread()getContextClassLoader()getResource("")getPath() 这种方式可以正确获取字体文件路径

但是 spring boot 打成 jar 包之后,以上方法就访问不到字体文件了,需要用流的方式访问:

在目前的微服务和容器部署的SpringBoot坏境下,我们一般将项目直接打成 jar包的方式运行(java -jar ),我们可能需要读取resources目录下的自定义文件,想在程序运行时找到该目录,并读取需要的文件。

当时我使用 SystemgetProperty("userdir") 获取工作目录的坑,本地idea工具运行没问题,但是一但打成jar包,路径会变成jar包所在的目录,无法读取jar内部的文件, 不建议用这种方式

由于jar中的文件都属于资源的一种,所以获取需从类加载器进行获取。正确的姿势是采用 thisgetClass()getClassLoader()getResourceAsStream() 的方式。

读取自定义文件时,由于getResourceAsStream方法返回的是一个InputStream流,采用InputStreamReader这种方式 最好指定一种编码方式 ,不然可能 中文乱码 !(我在解析xml时中文乱码)

每一个jar都有对应的源码的zip文件,这个文件需要另外下载。

然后在java builder path 的libraries页,点开需要关联源码的jar的+号,选中source attachment,点击edit按钮,然后选中源码路径即可。

例如,jdk的源码为jdk安装目录下srczip,按上述方法关联。 第三方包,下载源码后关联。

如认可,请您赏分30分,谢谢

命令行参数:

args[0] 待打包的完整文件路径

args[1] jar 输出文件的完整路径

import javaio;

import javautilzip;

/

@author Hardneedl

/

public class JarPacker {

public static void main(String[] args) {

File inFile = new File(args[0]);

ZipEntry zipEntry = new ZipEntry (inFilegetName());

try {

InputStream ins = new FileInputStream(inFile);

byte[]datas = new byte[insavailable()];

insread(datas);

insclose();

ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(args[1]));

zoutputNextEntry(zipEntry);

zoutwrite(datas);

zoutcloseEntry();

zoutfinish();

zoutclose();

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

}

在java中有jar命令 你可以在查看一下jar帮助 很简单的

用 getDocumentBase()定位到class文件的位置 在后面" "中添加你的路径加名称

例如:

Image Im=getImage(getDocumentBase(),"photo/1jpg");

将photo文件夹和class放在同一级目录就可以加载photo中的(1jpg)了

动态加载配置文件信息,你可以写一个以properties为扩展名的文件,里面存放key=value的,

读key,自然获取value了,java中有Properties类,专门读取这个文件的,你上述代码就是说加载那个文件获取流,然后再用我说的类 *** 作。

比如你的文件叫confproperties,那路径就写

thisgetClassgetRecourceAs Stream("/confproperties");

该配置文件放到源文件夹下(通常src),不论是web项目还是java项目

看大家你一言我一语的,估计楼主也不明白,

楼主都说自己是听说了,说明不太懂。切实的,部署到weblogic里会把classes打成jar包

不是这么个意思。

是这样的,听我说,weblogic会把应用打成war包,没有把classes打成jar包这么回事儿,这点要区分清楚。

应用包括组件,jsp页面,和WEB-INF目录。

2、你要去1txt,假设,路径是这样子哦:application/WEB-INF/classes

那么,你的war包的应用就是application,当然这个application是存在在weblogic创建的域中的,

JDK14对应: String path = requestgetRealPath("/");

JDK16对应 String path = requestgetSession()getServletContext()getRealPath("");

这句代码就取到了application,所以你的最终路径就是path = path + "

WEB-INF/classes/cyc/1txt"

以上就是关于Jar包找不到文件路径问题全部的内容,包括:Jar包找不到文件路径问题、jar方式运行项目-读取jar包中的文件、如何解析打包的jar文件 获取源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9733061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存