Java Project 打成jar包后 如何读取配置文件

时间:2021-07-21 09:15:12
写了一个Java Project,其中用到了资源文件,打成jar包后,总是说找不到资源文件,怎么办?希望懂得朋友给个建议~!

9 个解决方案

#1


InputStream in = XXX.class.getClassLoader().getResourceAsStream("XXX.properties");
这种方式加载类路径下的资源文件
要把资源文件放到类路径中

方法很多,我最喜欢这种。

#2


把资源文件放到源文件目录。
编译后再打包。

#3


不建议将资源文件也打包到JAR中

#4


引用 2 楼 bayougeng 的回复:
把资源文件放到源文件目录。
编译后再打包。

学习

#5


把路径改成绝对路径,应该就可以了

#6


如果不希望把配置文件之类的打到jar里,那么用
String sPath= System.getProperty("user.dir");
然后配置文件的路径为
String filepath = "file:///"+sPath+"\\xxxx.xxx";

#7


路径问题

#8


引用 1 楼 gardner2010 的回复:
InputStream in = XXX.class.getClassLoader().getResourceAsStream("XXX.properties");
这种方式加载类路径下的资源文件
要把资源文件放到类路径中

方法很多,我最喜欢这种。

这种做法如果换到类加载机制是委托的。就是一出悲剧了。

引用楼主 jixl0224 的回复:
写了一个Java Project,其中用到了资源文件,打成jar包后,总是说找不到资源文件,怎么办?希望懂得朋友给个建议~!

首先楼主应该明白jar包中的资源,要生存一个file对象是不可能地。最好的情况就能取个inputstream,我想这基本就可以解决你的问题。
下面是取sqlserver中msbase.jar的META-INF/MANIFEST.MF文件。

InputStream is = Test.class.getResourceAsStream("/META-INF/MANIFEST.MF");
int i = 0;
byte[] buff = new byte[1024];
while((i=is.read(buff))>0)
{
System.out.println(new String(buff,0,i));
}
is.close();

Test类指代classpath中任意类jar包中的也可以。但是需要注意地是你jar包中的配置文件,必须是唯一命名。不能和项目中的任意文件重名,包括jar包中的文件。

#9


google

#1


InputStream in = XXX.class.getClassLoader().getResourceAsStream("XXX.properties");
这种方式加载类路径下的资源文件
要把资源文件放到类路径中

方法很多,我最喜欢这种。

#2


把资源文件放到源文件目录。
编译后再打包。

#3


不建议将资源文件也打包到JAR中

#4


引用 2 楼 bayougeng 的回复:
把资源文件放到源文件目录。
编译后再打包。

学习

#5


把路径改成绝对路径,应该就可以了

#6


如果不希望把配置文件之类的打到jar里,那么用
String sPath= System.getProperty("user.dir");
然后配置文件的路径为
String filepath = "file:///"+sPath+"\\xxxx.xxx";

#7


路径问题

#8


引用 1 楼 gardner2010 的回复:
InputStream in = XXX.class.getClassLoader().getResourceAsStream("XXX.properties");
这种方式加载类路径下的资源文件
要把资源文件放到类路径中

方法很多,我最喜欢这种。

这种做法如果换到类加载机制是委托的。就是一出悲剧了。

引用楼主 jixl0224 的回复:
写了一个Java Project,其中用到了资源文件,打成jar包后,总是说找不到资源文件,怎么办?希望懂得朋友给个建议~!

首先楼主应该明白jar包中的资源,要生存一个file对象是不可能地。最好的情况就能取个inputstream,我想这基本就可以解决你的问题。
下面是取sqlserver中msbase.jar的META-INF/MANIFEST.MF文件。

InputStream is = Test.class.getResourceAsStream("/META-INF/MANIFEST.MF");
int i = 0;
byte[] buff = new byte[1024];
while((i=is.read(buff))>0)
{
System.out.println(new String(buff,0,i));
}
is.close();

Test类指代classpath中任意类jar包中的也可以。但是需要注意地是你jar包中的配置文件,必须是唯一命名。不能和项目中的任意文件重名,包括jar包中的文件。

#9


google