使用下面的代碼嘗試將包含其所有子目錄和文件的目錄打包到一個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()將獲得入門IDS是做目錄這些文件之間不 區分條目。 然而,當我使用
file.getAbsolutePath()
例如, jar結構與 目錄(如「C_」)混亂,並且包含的文件不再可讀。
任何人都可以推薦一種方法來正確打包jar文件中的目錄結構嗎?
看看我做的課程:http://all-inhonmodman.svn.sourceforge.net/viewvc/all-inhonmodman/ModManager/src/modmanager/utility/ZIP.java?revision=292&content-type=文本%2Fplain它有你需要的所有方法。 – SHiRKiT 2012-01-11 15:17:12