#java #jar
#java #jar
Вопрос:
Мне нужно прочитать zip-файл из моего jar, чтобы я мог передать его конструктору OpenOfficeSpellDictionary. Поскольку файл dictionary .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;
}
и он выводит :
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 в ссылку на файл внутри файла jar без создания где-либо временного файла? Было бы создание временного файла где-нибудь ужасно хакерским, если бы я мог?
Комментарии:
1. Вопрос в том, почему архивирование в любом случае в файле jar? Простая папка внутри jar была бы лучшим подходом и служила бы для упорядочивания файлов данных / ресурсов по какому-либо вопросу. Какова цель вашего подхода?
2. Ресурсы не являются файлами. Переосмыслите.
3. Изначально в проекте (и это очень старый проект, не моего собственного создания) zip-файлы находились вне файла jar — я просто пытаюсь поместить их внутрь jar, чтобы конечному пользователю не нужно было загружать zip-файлы отдельно. Я не контролирую OpenOfficeSpellDictionary api, и ему необходимо использовать zip-файлы в качестве zip-файлов. Если это невозможно сделать с помощью довольно простого изменения кода, я верну код, поскольку это не является жизненно важной функцией.