java.io.Fileをjava.util.zip.ZipFileにコピーするメソッドを作成しようとしています。このためには、最初にZipFileのjava.util.zip.ZipOutputStreamを開き、ファイルの名前で新しいjava.util.zip.ZipEntryを作成し、その新しいZipEntryをZipOutputStreamに入れ、Fileの内容を書き込みますZipOutputStreamに渡します。その後、私はZipOutputStreamをフラッシュし、すべてのストリームを閉じます。Java - 新しいZipEntryを追加するときにZipEntriesが削除される
何らかの理由で、私はこの手順でZipFileから他のすべてのZipEntriesを削除し、そこにコピーされたものだけを残すことは説明できません。ここでは、ファイルをコピーするためのコード(ファイルはjava.io.InputStreamをパラメータによって表される)
public static boolean compress(final InputStream pSourceStream, final ZipFile pTarget, final ZipEntry pContainer,
final String pFileName) {
if (pSourceStream != null && pTarget != null && pFileName != null && !pFileName.isEmpty()) {
try {
final ZipOutputStream output = new ZipOutputStream(new FileOutputStream(new File(pTarget.getName())));
final ZipEntry target = (pContainer != null) ? new ZipEntry(pContainer.getName() + pFileName)
: new ZipEntry(pFileName);
output.putNextEntry(target);
final byte[] buffer = new byte[BUFFER_SIZE];
int readBytes;
while ((readBytes = pSourceStream.read(buffer)) != -1) {
output.write(buffer, 0, readBytes);
}
pSourceStream.close();
output.flush();
output.close();
return true;
} catch (final IOException ignore) {
// took care of target
// ios will return false
}
}
return false;
}
ここではそうbasiclyここで何をやってイム
public static void main(final String[] args) throws ZipException, IOException {
final Package p = FileHandler.class.getPackage();
final InputStream classStream = FileHandler.stream(p, "FileHandler.class");
FileHandler.compress(classStream, new ZipFile(new File("C:/Users/litts/Desktop/FileHandlerTest/TestZip.jar")),
"FileHandler1.class");
}
このメソッドを呼び出して、私のコードがあるですFileHandlerのクラスファイルをzipファイルにコピーしています。しかし、他のすべてのコンテンツは削除されます。
は、新たなエントリが作成され、ストリームはその焦点を当てていることを、言います1。私はそれが自動的にすべての古いデータを削除するとは思わなかった。つまり、既存のすべてのデータを新しい出力ストリームにコピーする必要がありますか? 「ファイルレベル」はどういう意味ですか?聞いたことはありません。 idkの多くについては、どちらかのアーカイブについてのいずれか – Basti
私は古いコンテンツをRAMにコピーして、一度に読み込んでいます。新しいエントリと一緒にコピーしました。今働いている。手がかりをありがとう – Basti
Zipファイルを読むためには、ある種のInputStreamが必要です。 – Lee