将指定ZIP文件解压到指定文件夹中的程序
但是运行后出错。一直没找到错误的原因。(我比较笨)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class Unzip
{
public void zipExtracting(String filePath, String zipFile)
{
int BUFFER = 1024;
BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry = null;
ZipFile zipfile = null;
Enumeration enu = null;
try
{
zipfile = new ZipFile(zipFile);
enu = zipfile.entries();
while (enu.hasMoreElements())
{
entry = (ZipEntry) enu.nextElement();
if (entry.isDirectory())
{
new File(filePath + entry.getName()).mkdirs();
continue;
}
is = new BufferedInputStream(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(filePath + entry.getName());
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = is.read(data, 0, BUFFER)) != -1)
{
dest.write(data, 0, count);
}
dest.flush();
dest.close();
is.close();
}
} catch (Exception e)
{
e.printStackTrace();
}finally
{
try
{
if (dest != null)
{
dest.flush();
dest.close();
}
if (is != null)
{
is.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String args[]){
Unzip uu=new Unzip();
uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip");
}
}
错误信息:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:203)
at java.util.zip.ZipFile.<init>(ZipFile.java:84)
at BatchUploadExtracting.zipExtracting(BatchUploadExtracting.java:21)
at BatchUploadExtracting.main(BatchUploadExtracting.java:70)
但是运行后出错。一直没找到错误的原因。(我比较笨)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class Unzip
{
public void zipExtracting(String filePath, String zipFile)
{
int BUFFER = 1024;
BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry = null;
ZipFile zipfile = null;
Enumeration enu = null;
try
{
zipfile = new ZipFile(zipFile);
enu = zipfile.entries();
while (enu.hasMoreElements())
{
entry = (ZipEntry) enu.nextElement();
if (entry.isDirectory())
{
new File(filePath + entry.getName()).mkdirs();
continue;
}
is = new BufferedInputStream(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(filePath + entry.getName());
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = is.read(data, 0, BUFFER)) != -1)
{
dest.write(data, 0, count);
}
dest.flush();
dest.close();
is.close();
}
} catch (Exception e)
{
e.printStackTrace();
}finally
{
try
{
if (dest != null)
{
dest.flush();
dest.close();
}
if (is != null)
{
is.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String args[]){
Unzip uu=new Unzip();
uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip");
}
}
错误信息:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:203)
at java.util.zip.ZipFile.<init>(ZipFile.java:84)
at BatchUploadExtracting.zipExtracting(BatchUploadExtracting.java:21)
at BatchUploadExtracting.main(BatchUploadExtracting.java:70)
楼主【chaicg】截止到2008-06-22 23:59:54的历史汇总数据(不包括此帖):
发帖数:2 发帖分:40
结贴数:2 结贴分:40
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
这个方法是不是还有别的参数,进行设置呢?
我没有用过.
在zipExtracting方法里加入
new File(filePath).mkdir();
出现了一个乱码名字的TXT文件。
然后把123.txt添加到123.zip里边程序正常执行,所以我觉得是中文问题造成的
Unzip uu=new Unzip();
uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip");
}
}
=========================================
红色这行有问题。你把它改写成类似这样,试一下
("d:\\"+File.separator+"123456"+File.separator, "d:\\"+File.separator+"123.zip"); 或
("d:\"+File.separator+"123456"+File.separator, "d:\"+File.separator+"123.zip");
if (entry.isDirectory())
{
new File(filePath + entry.getName()).mkdirs();
continue;
}
这里看着似乎是创建目录了.但是如果在ZIP文件的根目录中就有文件.这时候又恰恰
取到的这个文件.那么entry.isDirectory()就不满足.所以写的时候就出错啦.
所以应该在你循环ZIP的ENTRY前就应该创建这个目录 .