このzipファイルをJava/Groovyで作成する方法をいくつか試しました。私が試みた最初のいくつかの方法は、さまざまなブログ/投稿から、開くことができなかった破損したzipファイルをもたらしました。それで、私はかなり有望に見えたこれ(下)を試しました。sysoutsは、FileInputStreamに渡されている有効なファイルパスを報告します。問題の原因がZipOutputStreamに渡されているFQパスであるかどうかはわかりません。いずれにせよ、以下はコードであり、その結果、小さな(188kb)zipファイル(エントリなし)が作成されます。助言がありますか?
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
class FileZipper {
public static void makeZip(Set fullyQualifiedFileNames, String zipFileName, String outDir) throws IOException, FileNotFoundException
{
// These are the files to include in the ZIP file
Object[] filenames = fullyQualifiedFileNames.toArray();
String fileSeparator = (String) System.getProperties().get("file.separator");
// Create a buffer for reading the files
byte[] buf = new byte[1024];
// Create the ZIP file
String outFilename = outDir + fileSeparator +zipFileName;
FileOutputStream fos = new FileOutputStream(outFilename);
ZipOutputStream zos = new ZipOutputStream(fos);
System.out.println("Zipping to file " +outFilename);
// Compress the files
for (Object fileName: filenames)
{
System.out.println("Adding file: " + fileName);
FileInputStream fis = new FileInputStream((String)fileName);
// Add ZIP entry to output stream.
String[] nodes = ((String)fileName).split("[/[\\\\]]");
String zipEntry = nodes[nodes.length-1];
System.out.println("Adding Zip Entry: " + zipEntry);
zos.putNextEntry(new ZipEntry((String)fileName));
// Transfer bytes from the file to the ZIP file
int len;
int totalBytes = 0;
while ((len = fis.read(buf)) > 0)
{
totalBytes += len;
zos.write(buf, 0, len);
}
System.out.println("Zipped " +totalBytes +" bytes");
// Complete the entry
zos.closeEntry();
fis.close();
}
// Complete the ZIP file
zos.close();
fos.close();
}
}