0

我有一个文件,比如说C:\source.dat. 我想把它压缩成一个 zip 文件C:\folder\destination.zip

我找不到一个简单的例子,并且 Maven 项目提供的 HelloWorld 并不真正适用于我的情况,因为我不是在编写纯文本文件,所以希望有人能在这方面启发我。

作为参考,示例中提供的代码:

@Override
protected int work(String[] args) throws IOException {
    // By default, ZIP files use character set IBM437 to encode entry names
    // whereas JAR files use UTF-8.
    // This can be changed by configuring the respective archive driver,
    // see Javadoc for TApplication.setup().
    final Writer writer = new TFileWriter(
            new TFile("archive.zip/dir/HälloWörld.txt"));
    try {
        writer.write("Hello world!\n");
    } finally {
        writer.close();
    }
    return 0;
}
4

2 回答 2

3

就这么简单:

new TFile("source.dat").cp(new TFile("destination.zip/source.dat"));

有关更多信息,请参阅位于http://truezip.java.net/apidocs/de/schlichtherle/truezip/file/TFile.html的 TFile 类的 Javadoc 。

您可能还想尝试在http://truezip.java.net/kick-start/index.html中介绍的 TrueZIP Archetype File* 。原型会生成许多示例程序,您应该探索这些示例程序以了解 API。

于 2013-04-19T12:34:33.813 回答
1

这是一件直截了当的事情。

采用

1. ZipOutputStream——这个java类这个类实现了一个输出流过滤器,用于以ZIP文件格式写入文件。包括对压缩和未压缩条目的支持。

官方文档

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipOutputStream.html

2. ZipEntry——这个类用来表示一个ZIP文件条目。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/zip/ZipEntry.html

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ConverToZip {

    public static void main(String[] args) {
        // Take a buffer
        byte[] buffer = new byte[1024];

        try {

            // Create object of FileOutputStream

            FileOutputStream fos = new FileOutputStream("C:\\folder\\destination.zip.");

            // Get ZipOutstreamObject Object
            ZipOutputStream zos = new ZipOutputStream(fos);


            ZipEntry ze = new ZipEntry("source.dat");
            zos.putNextEntry(ze);
            FileInputStream in = new FileInputStream("C:\\source.dat");

            int len;
            while ((len = in .read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            }

            in .close();
            zos.closeEntry();

            //remember close it
            zos.close();

            System.out.println("Done");

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
于 2013-04-19T03:38:31.547 回答