我有一个txt
文件。我使用jar cf0...
将它打包成拉链和罐子。为了让这个工作起作用,我尝试了两种方法。
models.zip/models.jar
|
|_subfolder
|
|_MyFile.txt
在某些代码中,我有......
InputStream in = getClass().getClassLoader().getResourceAsStream(path);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
我尝试过设置路径...
MyFile.txt
/MyFile.txt
/subfolder/MyFile.txt
classpath:/subfolder/MyFile.txt
models.zip/subfolder/MyFile.txt
models.jar/subfolder/MyFile.txt
models.zip!/subfolder/MyFile.txt
models.jar!/subfolder/MyFile.txt
我也尝试将jar/zip
放入WEB-INF/classes
和WEB-INF/lib
。
这些都不起作用,in
始终为空。
就这样你知道,当我把MyFile.txt放在WEB-INF /类中时,我可以把它弄好。
请提供久经考验的答案!请不要只复制并粘贴其他答案中的代码。
答案 0 :(得分:2)
尝试
InputStream is = getClass().getClassLoader().getResourceAsStream ("/subfolder/MyFile.txt");
并将您的jar文件放在WEB-INF / lib /
中 编辑:你应该相信自己的代码,这是我运行的webapp的一个片段。 类在包“it.sft.utils.props”中,相对属性文件通过ant int打包在同一个jar的同一个文件夹中。这完美无缺。在您的特定场景中,您的类路径中可能没有jar
private void loadFromProperties() throws IOException {
if (currencies == null) {
currencies = new Properties();
InputStream is = this.getClass().getClassLoader().getResourceAsStream ("/it/sft/utils/props/currencies.props");
if (is != null) {
currencies.load(is );
for (String key : currencies.stringPropertyNames()) {
String value = currencies.getProperty(key);
try {
String [] tmp = value.split(",");
String code = tmp[0];
int decs = Integer.parseInt(tmp[1]);
String text = tmp[2];
Logger.getLogger(CurrencyResolver.class).debug("Adding " + key + " with code " + code + " [" + text + "]");
storeValutaIso4217(new ValutaIso4217(key, code, decs, text));
}catch (Exception e) {
// Ignore
Logger.getLogger(CurrencyResolver.class).warn("Cannot handle " + key + " >" + value + "<");
}
}
}
}
}
或者您是否偶然从某种IDE(NetBeans或Eclipse)运行它?
只是因为偏执:jar文件实际上是由tomcat运行用户读取的,不是吗?
答案 1 :(得分:1)
我认为问题是/
中的/subfolder/MyFile.txt
结尾。
spring ClassPathResource类使用的操作几乎与您使用的操作相同,但是javadoc states plainly:
为ClassLoader用法创建一个新的ClassPathResource。领先的斜线 将被删除,因为ClassLoader资源访问方法不会 接受它。
所以,没有春天,它将是:
Thread.currentThread().getContextClassLoader().getResourceAsStream("subfolder/MyFile.txt");
此外,您的jar必须放在WEB-INF/lib
中,或者如果您想单独放置文本文件,请将其放入WEB-INF/classes/subfolder/
。
如果您正在使用spring(我猜是因为您使用的是伪url类路径:)直接使用:
InputStream is = new ClassPathResource("subfolder/MyFile.txt").getInputStream();
答案 2 :(得分:1)
我觉得自己像个笨蛋!问题是在lib和classes文件夹中都有models.jar。它应该只在lib文件夹中。