私はzipファイルを持っています。その中にあるファイルを別のファイルに置きたいと思います。だから、zipエントリを削除する必要はありません。ただ、zipエントリのファイルを別のものに置き換えてください。Javaで解凍しないでZipファイルを置換する
これは私が試したものです。
public void replaceConfigurationFile(ZipFile zipFile, ZipOutputStream zos, String pathToNewFile, String configFileToReplaced)
throws IOException {
String zipEntryName;
for(Enumeration<?> e = zipFile.entries(); e.hasMoreElements();) {
ZipEntry entryIn = (ZipEntry) e.nextElement();
zipEntryName = entryIn.getName();
if(zipEntryName.endsWith(configFileToReplaced)) {
FileInputStream fis = new FileInputStream(pathToNewFile);
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
} else {
zos.putNextEntry(entryIn);
InputStream is = zipFile.getInputStream(entryIn);
byte [] buf = new byte[1024];
int len;
while((len = (is.read(buf))) > 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
}
} // enf of for
}
は私が指定したファイルのZIPエントリがあります。
WEB-INF/classes/config/app-dev.yml
を、私は私がして、ファイルをコピーすることができていた場所
D:/app-dev.yml
の位置Dドライブにファイルを持っています私は置き換えるファイルを置き換えることによって異なるzipファイル。しかし、それは本当に必要ではありません(別のファイルを作成する)。 ファイルをカスタムファイルで置き換えるには、どうすればよいですか。
私はStackoverflowで別の投稿を検索しましたが、必要なものを見つけることができませんでした。私はzipエントリを削除することはできませんが、それを置き換えるのはどうですか?助けてください
はい置き換えられるファイルのサイズは、バイトのサイズとは異なります。しかし、違いはそこにあります。 どうすれば交換できますか? –
正確には、あなたの大きなデータのためのスペースを確保するために、ファイルの残りの部分をコピーするコードはありますか?単によりも複雑です:1)上記のことをしてください。 2)古いファイルを削除します。 3)新しいファイルの名前を変更します。 –
5つの設定ファイルがあり、zipファイルのサイズが170 MBなので、zipファイルを5回、5つのX 170 MBファイルを作成するので、5つの大きなファイルを作成、置き換え、名前を変更することは非常に効率が悪いです。 –