需要ant.jar包中的org.apache.tools.zip,能够压缩和解压缩用中文命名的文件。
实现压缩
import
java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* @author ourife
* @version 创建时间:Jun 29, 2007 11:41:41 AM
* 压缩文件
*/
public class Zip {
private static List list = new ArrayList();
public static void main(String argv[]) {
try {
byte b[] = new byte [ 512 ];
// 压缩文件的保存路径
String zipFile = " D:/testzip/test.zip " ;
// 压缩文件目录
String filepath = " D:/testzip/ " ;
List fileList = allFile(filepath);
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
// 使用输出流检查
CheckedOutputStream cs = new CheckedOutputStream(fileOutputStream, new CRC32());
// 声明输出zip流
ZipOutputStream out = new ZipOutputStream( new BufferedOutputStream(
cs));
for ( int i = 0 ; i < fileList.size(); i ++ ) {
InputStream in = new FileInputStream((String)fileList.get(i));
String fileName = ((String)(fileList.get(i))).replace(File.separatorChar, ' / ' );
System.out.println( " ziping " + fileName);
fileName = fileName.substring(fileName.indexOf( " / " ) + 1 );
ZipEntry e = new ZipEntry(fileName);
out.putNextEntry(e);
int len = 0 ;
while ((len = in.read(b)) != - 1 ) {
out.write(b, 0 ,len);
}
out.closeEntry();
}
out.close();
System.out.println( " done! " );
} catch (Exception e) {
e.printStackTrace();
}
}
private static List allFile(String path)
{
File file = new File(path);
String[] array = null ;
String sTemp = "" ;
if (file.isDirectory())
{
} else {
return null ;
}
array = file.list();
if (array.length > 0 )
{
for ( int i = 0 ;i < array.length;i ++ )
{
sTemp = path + array[i];
file = new File(sTemp);
if (file.isDirectory())
{
allFile(sTemp + " / " );
} else {
list.add(sTemp);
}
}
} else {
return null ;
}
return list;
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* @author ourife
* @version 创建时间:Jun 29, 2007 11:41:41 AM
* 压缩文件
*/
public class Zip {
private static List list = new ArrayList();
public static void main(String argv[]) {
try {
byte b[] = new byte [ 512 ];
// 压缩文件的保存路径
String zipFile = " D:/testzip/test.zip " ;
// 压缩文件目录
String filepath = " D:/testzip/ " ;
List fileList = allFile(filepath);
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
// 使用输出流检查
CheckedOutputStream cs = new CheckedOutputStream(fileOutputStream, new CRC32());
// 声明输出zip流
ZipOutputStream out = new ZipOutputStream( new BufferedOutputStream(
cs));
for ( int i = 0 ; i < fileList.size(); i ++ ) {
InputStream in = new FileInputStream((String)fileList.get(i));
String fileName = ((String)(fileList.get(i))).replace(File.separatorChar, ' / ' );
System.out.println( " ziping " + fileName);
fileName = fileName.substring(fileName.indexOf( " / " ) + 1 );
ZipEntry e = new ZipEntry(fileName);
out.putNextEntry(e);
int len = 0 ;
while ((len = in.read(b)) != - 1 ) {
out.write(b, 0 ,len);
}
out.closeEntry();
}
out.close();
System.out.println( " done! " );
} catch (Exception e) {
e.printStackTrace();
}
}
private static List allFile(String path)
{
File file = new File(path);
String[] array = null ;
String sTemp = "" ;
if (file.isDirectory())
{
} else {
return null ;
}
array = file.list();
if (array.length > 0 )
{
for ( int i = 0 ;i < array.length;i ++ )
{
sTemp = path + array[i];
file = new File(sTemp);
if (file.isDirectory())
{
allFile(sTemp + " / " );
} else {
list.add(sTemp);
}
}
} else {
return null ;
}
return list;
}
}
实现解压缩
import
java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/**
* @author ourife
* @version 创建时间:Jun 29, 2007 11:51:52 AM
* 解压缩文件
*/
public class UnZip {
public static void main(String argv[]) {
try {
String outputDirectory = " D:/testzip/ " ;
ZipFile zipFile = new ZipFile( " D:/testzip/test.zip " );
Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null ;
createDirectory(outputDirectory, "" );
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
System.out.println( " unziping " + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring( 0 , name.length() - 1 );
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace( ' / ' , ' / ' );
if (fileName.indexOf( " / " ) != - 1 ) {
createDirectory(outputDirectory, fileName.substring( 0 ,fileName.lastIndexOf( " / " )));
}
File f = new File(outputDirectory
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte [] by = new byte [ 1024 ];
int c;
while ((c = in.read(by)) != - 1 ) {
out.write(by, 0 , c);
}
out.close();
in.close();
}
}
System.out.println( " done! " );
} catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true )
fl.mkdir();
else if (subDirectory != "" ) {
dir = subDirectory.replace( ' / ' , ' / ' ).split( " / " );
for ( int i = 0 ; i < dir.length; i ++ ) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false )
subFile.mkdir();
directory += File.separator + dir[i];
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/**
* @author ourife
* @version 创建时间:Jun 29, 2007 11:51:52 AM
* 解压缩文件
*/
public class UnZip {
public static void main(String argv[]) {
try {
String outputDirectory = " D:/testzip/ " ;
ZipFile zipFile = new ZipFile( " D:/testzip/test.zip " );
Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null ;
createDirectory(outputDirectory, "" );
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
System.out.println( " unziping " + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring( 0 , name.length() - 1 );
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace( ' / ' , ' / ' );
if (fileName.indexOf( " / " ) != - 1 ) {
createDirectory(outputDirectory, fileName.substring( 0 ,fileName.lastIndexOf( " / " )));
}
File f = new File(outputDirectory
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte [] by = new byte [ 1024 ];
int c;
while ((c = in.read(by)) != - 1 ) {
out.write(by, 0 , c);
}
out.close();
in.close();
}
}
System.out.println( " done! " );
} catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
}
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true )
fl.mkdir();
else if (subDirectory != "" ) {
dir = subDirectory.replace( ' / ' , ' / ' ).split( " / " );
for ( int i = 0 ; i < dir.length; i ++ ) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false )
subFile.mkdir();
directory += File.separator + dir[i];
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}