Im используя следующий код, чтобы попробовать пакет, каталог со всеми его подкаталогами и файлами в один jar-файл.Как jar/zip весь каталог Структура с java.util.jar api?
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?
Взгляните на класс, который я сделал: http://all-inhonmodman.svn.sourceforge.net/viewvc/all-inhonmodman/ModManager/src/modmanager/utility/ZIP.java?revision=292&content-type= text% 2Fplain У этого есть все методы, в которых Вы нуждаетесь. – SHiRKiT