1)因为使用jdk自带的压缩类或导致中文乱码,所以使用ant.jar中带的压缩类
2)maven中导入ant.jar
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>
3)压缩文件
<span style="white-space:pre"> </span> try
{
File file = new File("e:"+File.separator+"文件.txt");
File bmp = new File("e:"+File.separator+"图像.bmp");
if (!file.exists() || !bmp.exists())
{
<span style="white-space:pre"> </span>System.out.println("文件不存在");
}
else
{
File zip = new File("e:"+File.separator+"中文压缩.zip");
if (!zip.exists())
{
zip.createNewFile();
}
<span style="white-space:pre"> </span>// 创建文件输入流对象
<span style="white-space:pre"> </span>FileInputStream fin = new FileInputStream(file);
<span style="white-space:pre"> </span>FileInputStream bin = new FileInputStream(bmp);
<span style="white-space:pre"> </span>// 创建文件输出流对象
<span style="white-space:pre"> </span>FileOutputStream out = new FileOutputStream(zip);
<span style="white-space:pre"> </span>// 创建ZIP数据输出流对象
<span style="white-space:pre"> </span>ZipOutputStream zipOut = new ZipOutputStream(out);
<span style="white-space:pre"> </span>zipOut.setEncoding("gb18030");
<span style="white-space:pre"> </span>// 创建指向压缩原始文件的入口
<span style="white-space:pre"> </span>int number = 0;
<span style="white-space:pre"> </span>zipOut.putNextEntry(new ZipEntry(file.getName()));
<span style="white-space:pre"> </span>// 向压缩文件中输出数据
<span style="white-space:pre"> </span>byte[] buffer = new byte[512];
<span style="white-space:pre"> </span>//向压缩包中第一个文件写入数据
<span style="white-space:pre"> </span>while ((number = fin.read(buffer)) != -1) {
<span style="white-space:pre"> </span>zipOut.write(buffer, 0, number);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//向压缩包中第二个文件写入数据
<span style="white-space:pre"> </span>zipOut.putNextEntry(new ZipEntry(bmp.getName()));
<span style="white-space:pre"> </span>while ((number = bin.read(buffer)) != -1) {
<span style="white-space:pre"> </span> zipOut.write(buffer, 0, number);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>zipOut.close();
<span style="white-space:pre"> </span>out.close();
<span style="white-space:pre"> </span>fin.close();
<span style="white-space:pre"> </span>bin.close();
<span style="white-space:pre"> </span>}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}