能呀,你用递归判断呀. public static boolean zipfile(String infile, String strzipfile) {
boolean blnzipfile = false;
File filein;
File fileout;
String sourceFile = infile;
//sourceFile = GBToUnicode(sourceFile);
filein = new File(sourceFile);
fileout = new File(strzipfile);
/* if(fileout.isDirectory()){
fileout = new File(strzipfile+"/.zip");
}*/
try {
FileOutputStream f = new FileOutputStream(fileout);
// CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32());
ZipOutputStream out = new ZipOutputStream(f);
//new ZipOutputStream( new BufferedOutputStream(csum));
String[] a = null;
//a =filein.list();
if (filein.isDirectory()) {
a = filein.list();
System.out.println("Îļþ¼ÐÄÚÎļþ¸öÊý£º" + a.length);
for (int i = 1; i <= a.length; i++) {
zipFileDetail(filein.getPath(), a[i - 1], out);
}
}
else {
zipFileDetail("", sourceFile, out);
}
out.close();
/*System.out.println("¶ÁÎļþ");
FileInputStream fi=new FileInputStream(fileout);
// CheckedInputStream csumi=new CheckedInputStream(fi,new Adler32());
ZipInputStream in2=new ZipInputStream(fi);
//new ZipInputStream(new BufferedInputStream(csumi));
ZipEntry ze;
// System.out.println("¶ÁÎļþÊý:"+in2.ggetChecksum().getValue());
while((ze=in2.getNextEntry())!=null){
System.out.println("Ô´Îļþ·¾¶£º"+ze);
}
in2.close();
ZipFile zf=new ZipFile(fileout);
Enumeration e=zf.entries();
while(e.hasMoreElements()){
ZipEntry ze2=(ZipEntry)e.nextElement();
System.out.println("ѹËõÍê³É£¬Ñ¹ËõÎļþ±£´æÔÚ£º"+ strzipfile);
}
System.out.println("---ok finsih ");*/
}
catch (Exception e) {
e.printStackTrace();
}
return blnzipfile = true;
} private static void zipFileDetail(String sPath, String strinfile,
ZipOutputStream out) {
System.out.println("·¾¶"+sPath+"ÎļþÃû"+strinfile);
FileInputStream in = null;
byte[] b = new byte[1024];
try {
String sFileName = "";
if (sPath.length() > 0) {
sFileName = sPath + "/" + strinfile;
}
else {
sFileName = strinfile; }
File filein = new File(sFileName);
if (filein.isDirectory()) {
String[] a = null;
a = filein.list();
for (int i = 1; i <= a.length; i++) {
zipFileDetail(sPath, strinfile + "/" + a[i - 1], out);
// zipFileDetail(filein.getPath(),a[i-1],out);
}
}
else {
in = new FileInputStream(sFileName);
//sFileName = new String (strinfile.getBytes());
//out.putNextEntry(new ZipEntry(strinfile));
//GBToUnicode
out.putNextEntry(new ZipEntry(GBToUnicode(strinfile)));
int c;
while ( (c = in.read(b)) > 0) {
out.write(b);
}
}
}
catch (Exception ex) {
}
finally {
try {
in.close();
}
catch (Exception e) {}
b = null;
}
} public static String UnicodeToGB(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("GB2312");
strOut = new String(b, "ISO8859_1");
}
catch (Exception e) {
System.out.println("unicodeToGB exception : " + e.getMessage() + "\n");
}
return strOut;
} public static String GBToUnicode(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("ISO8859_1");
strOut = new String(b, "GB2312");
}
catch (Exception e) {
System.out.println("GBToUnicode exception : " + e.getMessage() + "\n");
}
return strOut;
} public zip() {
} public static void main(String[] args) {
zip zip1 = new zip();
String s = "E:\\sql";
zipfile(GBToUnicode(s), "e:\\sql.zip");
}
}
boolean blnzipfile = false;
File filein;
File fileout;
String sourceFile = infile;
//sourceFile = GBToUnicode(sourceFile);
filein = new File(sourceFile);
fileout = new File(strzipfile);
/* if(fileout.isDirectory()){
fileout = new File(strzipfile+"/.zip");
}*/
try {
FileOutputStream f = new FileOutputStream(fileout);
// CheckedOutputStream csum=new CheckedOutputStream(f,new Adler32());
ZipOutputStream out = new ZipOutputStream(f);
//new ZipOutputStream( new BufferedOutputStream(csum));
String[] a = null;
//a =filein.list();
if (filein.isDirectory()) {
a = filein.list();
System.out.println("Îļþ¼ÐÄÚÎļþ¸öÊý£º" + a.length);
for (int i = 1; i <= a.length; i++) {
zipFileDetail(filein.getPath(), a[i - 1], out);
}
}
else {
zipFileDetail("", sourceFile, out);
}
out.close();
/*System.out.println("¶ÁÎļþ");
FileInputStream fi=new FileInputStream(fileout);
// CheckedInputStream csumi=new CheckedInputStream(fi,new Adler32());
ZipInputStream in2=new ZipInputStream(fi);
//new ZipInputStream(new BufferedInputStream(csumi));
ZipEntry ze;
// System.out.println("¶ÁÎļþÊý:"+in2.ggetChecksum().getValue());
while((ze=in2.getNextEntry())!=null){
System.out.println("Ô´Îļþ·¾¶£º"+ze);
}
in2.close();
ZipFile zf=new ZipFile(fileout);
Enumeration e=zf.entries();
while(e.hasMoreElements()){
ZipEntry ze2=(ZipEntry)e.nextElement();
System.out.println("ѹËõÍê³É£¬Ñ¹ËõÎļþ±£´æÔÚ£º"+ strzipfile);
}
System.out.println("---ok finsih ");*/
}
catch (Exception e) {
e.printStackTrace();
}
return blnzipfile = true;
} private static void zipFileDetail(String sPath, String strinfile,
ZipOutputStream out) {
System.out.println("·¾¶"+sPath+"ÎļþÃû"+strinfile);
FileInputStream in = null;
byte[] b = new byte[1024];
try {
String sFileName = "";
if (sPath.length() > 0) {
sFileName = sPath + "/" + strinfile;
}
else {
sFileName = strinfile; }
File filein = new File(sFileName);
if (filein.isDirectory()) {
String[] a = null;
a = filein.list();
for (int i = 1; i <= a.length; i++) {
zipFileDetail(sPath, strinfile + "/" + a[i - 1], out);
// zipFileDetail(filein.getPath(),a[i-1],out);
}
}
else {
in = new FileInputStream(sFileName);
//sFileName = new String (strinfile.getBytes());
//out.putNextEntry(new ZipEntry(strinfile));
//GBToUnicode
out.putNextEntry(new ZipEntry(GBToUnicode(strinfile)));
int c;
while ( (c = in.read(b)) > 0) {
out.write(b);
}
}
}
catch (Exception ex) {
}
finally {
try {
in.close();
}
catch (Exception e) {}
b = null;
}
} public static String UnicodeToGB(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("GB2312");
strOut = new String(b, "ISO8859_1");
}
catch (Exception e) {
System.out.println("unicodeToGB exception : " + e.getMessage() + "\n");
}
return strOut;
} public static String GBToUnicode(String strIn) {
byte[] b;
String strOut = null;
if (strIn == null || (strIn.trim()).equals("")) {
return strIn;
}
try {
b = strIn.getBytes("ISO8859_1");
strOut = new String(b, "GB2312");
}
catch (Exception e) {
System.out.println("GBToUnicode exception : " + e.getMessage() + "\n");
}
return strOut;
} public zip() {
} public static void main(String[] args) {
zip zip1 = new zip();
String s = "E:\\sql";
zipfile(GBToUnicode(s), "e:\\sql.zip");
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货