次のコードを使用して、すべてのサブディレクトリとファイルを含むディレクトリを1つの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()を使用してエントリを追加すると、それらのファイルがでているディレクトリを区別しませ ないエントリ-idを取得しますようです。 しかし、私は、例えば
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