4

3 つの文字列があり、それぞれがファイルの内容を表しtxt、コンピューターから読み込まれたのではなく、Java.

String firstFileCon = "firstContent"; //File in .gz: 1.txt
String secondFileCon = "secondContent"; //File in .gz: 2.txt
String thirdFileCon = "thirdContent"; //File in .gz: 3.txt

GZIP3 つのファイルを含むファイルを作成し、圧縮ファイルをディスクに保存するにはどうすればよいですか?

4

3 に答える 3

3

ファイル1.txt2.txt、および3.txtとそのコンテンツ文字列を含むoutput.zipという名前の zip ファイルを作成するには、次の手順を試してください。

Map<String, String> entries = new HashMap<String, String>();
entries.put("firstContent", "1.txt");
entries.put("secondContent", "2.txt");
entries.put("thirdContent", "3.txt");

FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
    fos = new FileOutputStream("output.zip");

    zos = new ZipOutputStream(fos);

    for (Map.Entry<String, String> mapEntry : entries.entrySet()) {
        ZipEntry entry = new ZipEntry(mapEntry.getValue()); // create a new zip file entry with name, e.g. "1.txt"
        entry.setMethod(ZipEntry.DEFLATED); // set the compression method
        zos.putNextEntry(entry); // add the ZipEntry to the ZipOutputStream
        zos.write(mapEntry.getKey().getBytes()); // write the ZipEntry content
    }
} catch (FileNotFoundException e) {
    // do something
} catch (IOException e) {
    // do something
} finally {
    if (zos != null) {
        zos.close();
    }
}

詳細については、ZIP および JAR ファイルの作成を参照してください。特に、ファイルの圧縮の章を参照してください。

于 2013-04-26T20:06:44.840 に答える
0

テキストだけを保存するのか、実際の個々のファイルを保存するのかは不明です。最初に TAR を実行しないと、複数のファイルを GZIP に格納できないと思います。ただし、文字列をGZIPに保存する例を次に示します。多分それはあなたを助けるでしょう:

public static void main(String[] args) {
    GZIPOutputStream gos = null;

    try {
        String str = "some string here...";
        File myGzipFile = new File("myFile.gzip");

        InputStream is = new ByteArrayInputStream(str.getBytes());
        gos = new GZIPOutputStream(new FileOutputStream(myGzipFile));

        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            gos.write(buffer, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try { gos.close(); } catch (IOException e) { }
    }
}
于 2013-04-26T20:22:36.650 に答える
0

一般的に言えば、GZIP単一のファイルを圧縮するためにのみ使用されます (したがって、java.util.zip.GZIPOutputStream実際には単一のエントリのみをサポートする理由)。

複数のファイルの場合は、複数のファイル用に設計された形式 (zip など) を使用することをお勧めします。 java.util.zip.ZipOutputStreamまさにそれを提供します。なんらかの理由で最終結果をGZIP本当にZIP.

于 2013-04-26T19:28:00.253 に答える