将字体文件放在 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文件 获取源码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)