フォルダの内容を圧縮しようとしています。つまり、zipを解凍するときに、フォルダーではなくフォルダーのコンテンツを取得したいのです。コンテンツはさまざまなファイルとサブフォルダーです
問題: ただし、これを行うと、作成された zip にファイルが表示されず、フォルダーのみが表示されます。さまざまな解凍ユーティリティを使用すると、ファイルがそこにあることがわかります。なんらかのセキュリティ設定が適用されているか、非表示にされているように感じます。他のプログラムで問題が発生しているため、ファイルを表示できる必要があります。
構造は次のようになります
- ジップ
- my.html
- my.css
- 他のフォルダ
好きじゃない
- ジップ
- マイフォルダー
- my.html
- my.css
- 他のフォルダ
- マイフォルダー
これが私が使用しているコードです
//create flat zip
FileOutputStream fileWriter = new FileOutputStream(myfolder +".zip");
ZipOutputStream zip = new ZipOutputStream(fileWriter);
File folder = new File(myfolder);
for (String fileName: folder.list()) {
FileUtil.addFileToZip("", myfolder + "/" + fileName, zip);
}
zip.flush();
zip.close();
//end create zip
これが私のFileUtilのコードです
public static void addFileToZip(String path, String srcFile,ZipOutputStream zip) throws IOException {
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
}
else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
zip.closeEntry();
zip.flush();
in.close();
//zip.close();
}
}
public static void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) throws IOException {
File folder = new File(srcFolder);
//System.out.println("Source folder is "+srcFolder+" into file "+folder);
for (String fileName: folder.list()) {
if (path.equals("")) {
addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
}
else {
//System.out.println("zipping "+path + "/" + folder.getName()+" and file "+srcFolder + "/" + fileName);
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
}
}
}
事前にご協力いただきありがとうございます。ここで見逃しているのはほんの些細なことだと思います。