3

私はtxtファイルを作成するコードを書いています。そのtxtファイルに完全に書き込んだ後、そのファイルを圧縮するよりもtxtファイルを完全に閉じることを意味します。しかし、理由はわかりません。ファイルを閉じる前にファイルを閉じるまで待たずに圧縮します..助けてください

これが私のコードです:

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public class zipfile {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        BufferedWriter bfAllBWPownmanmainfest = null;
        String mainfest = "file\\" + "fileforzip" + ".txt";
        bfAllBWPownmanmainfest = new BufferedWriter(new FileWriter(mainfest));

        bfAllBWPownmanmainfest.write("jdshsdksdkhdshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksdkhsdfsdfsddshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksdsdfdskhdshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksddsfdskhdshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksddsfdskhdshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksdsdfdskhdshksd\n");
        bfAllBWPownmanmainfest.write("jdshsdksddsfsdkhdshksd\n");

        bfAllBWPownmanmainfest.flush();
        bfAllBWPownmanmainfest.close();

        //After close file than zip that!! please help me Thanks

        FileOutputStream fout = new FileOutputStream("test.zip");
        ZipOutputStream zout = new ZipOutputStream(fout);

        ZipEntry ze = new ZipEntry(mainfest);
        zout.putNextEntry(ze);
        zout.closeEntry();
        zout.close();

    }

}

クローズ後 bfAllBWPownmanmainfest.close(); それを圧縮するよりも、どうすればそれを行うことができますか、高度に感謝してください!! 空のzipファイルを作成し、ファイルが完全に閉じるまで待ちませんでした!! 私を助けてください!!ありがとう!!

4

2 に答える 2

3

を作成しましたがZipEntry、実際には出力 zip ファイルにバイトを書き込んでいません。ファイルから読み取りInputStream、ファイルを作成したZipOutputStream後に書き込む必要がありますputNextEntry(ZipEntry)

FileInputStream in = new FileInputStream(mainfest);
byte[] bytes = new byte[1024];
int count;

FileOutputStream fout = new FileOutputStream("test.zip");
ZipOutputStream zout = new ZipOutputStream(fout);

ZipEntry ze = new ZipEntry(mainfest); // this is the name as it will appear if you opened the zip file with WinZip or some other zip manager
zout.putNextEntry(ze);

while ((count = in.read(bytes)) > 0) {
    zout.write(bytes, 0, count);
}

zout.closeEntry();
zout.close();
于 2013-08-28T19:47:29.630 に答える
0

は必要ありません。ステートメントのZipEntry前にこのコードをbfAllBWPownmanmainfest.close();試してください。

    ZipOutputStream zout = new ZipOutputStream(fout);
    int size = 0;
    byte[] b = new byte[1000];
    while ((size = bfAllBWPownmanmainfest.read(b)) > 0) {
       zout.write(b, 0, size);
    }
    zout.close();
    bfAllBWPownmanmainfest.close();
于 2013-08-28T19:48:28.240 に答える