Мне нужно прочитать zip-файл из моего jar-файла, чтобы я мог передать его конструктору OpenOfficeSpellDictionary.Поскольку файл словаря .zip находится внутри файла jar, я не могу создать новую ссылку на файл с URI, как я могу, когда файл находится за пределами файла jar.Кажется, правильный способ загрузки ресурса внутри jar-файла - это InputStream, но мне нужно передать файл конструктору OpenOfficeSpellDictionary.
Код теперь выглядит следующим образом:
public static SpellDictionary forLanguage( MyLanguage lang ){
String dictName = (String) props.get(lang.getLocale().getLanguage());
if ( dictName != null ){
if ( dicts.containsKey(lang) )
return dicts.get(lang);
System.out.println("loading dictionary for : " + lang);
URL url = Dictionaries.class.getClassLoader().getResource(dictName);
System.out.println(url); //prints null
try {
System.out.println("loading dictionary for dictname : " + dictName);
File zip = new File(url.toURI());
OpenOfficeSpellDictionary dict = new OpenOfficeSpellDictionary(
new ZipFile(zip)
);
dicts.put( lang, dict );
return dict;
} catch (Exception e){
e.printStackTrace();
dicts.put( lang, null );
}
}else{
System.out.println("dictname is null " );
}
return null;
}
и печатаетout:
loading dictionary for : English
null
loading dictionary for dictname : dict/en_US.zip
java.lang.NullPointerException
at org.jl.nwn.spell.Dictionaries.forLanguage(Dictionaries.java:58)
или иногда, когда я использую немного другой URI:
java.io.FileNotFoundException: jar:file:/Users/myname/Dev/MyProject/myjar.jar!/resource/dict/en_US.zip (No such file or directory)
Я попытался использовать для dictName строки /dict/en_US.zip, dict / en_US.zip, resource / dict / en_US.zip и /resource/dict/en_US.zip безрезультатно.Вызов
InputStream is = Dictionaries.class.getClassLoader().getResourceAsStream(
"resource/dict/dictionaries.properties");
работает, когда я пытаюсь загрузить реквизиты.
Могу ли я превратить InputStream в ссылку File внутри jar-файла без создания временного файла где-нибудь?Будет ли создание временного файла где-то ужасно взломанным, если я смогу?