Я использую следующий код, чтобы попробовать упаковать каталог со всеми его подкаталогами и файлами в один jar-файл.
private void writeFile(JarOutputStream jos, File f) throws IOException {
byte buffer[] = new byte[BUFFER_SIZE];
if (f == null || !f.exists())
return; //
JarEntry jarAdd = new JarEntry(f.getName());
jarAdd.setTime(f.lastModified());
jos.putNextEntry(jarAdd);
if(f.isDirectory()){
File[] files = f.listFiles();
for(int i = 0; i < files.length ; i++){
writeFile(jos,files[i]);
}
}
else{
FileInputStream in = new FileInputStream(f);
while (true) {
int nRead = in.read(buffer, 0, buffer.length);
if (nRead <= 0)
break;
jos.write(buffer, 0, nRead);
}
in.close();
}
}
Однако FileInputStream не работает с каталогами, поэтому я предполагаю, что добавление JarEntry будетДостаточно.
Поскольку у меня есть другая проблема, я не могу проверить, верно ли это предположение.Эта проблема заключается в том, что многие сделанные записи повторяются.
При попытке добавить структуру ...
activation
/--activation
/-- somefile.txt
... этот код завершается ошибкой, так как активация добавляется в банку дважды.Поскольку это разные каталоги, вложенные друг в друга, я не понимаю, почему это не должно работать каким-либо образом.
Кажется, что добавление записи с помощью file.getName () получит идентификаторы входа, которые не различаюткаталоги, в которых находятся эти файлы. Однако, когда я использую, например,
file.getAbsolutePath()
, структура jar перепутана с каталогами, такими как "C_", и содержащиеся в них файлы больше не читаются.
Кто-нибудь может порекомендовать способ правильной упаковки структур каталогов в jar-файл?