java压缩文件用ZipInputStream无法解压,下面是源代码
privatestaticvoidextZipFileList(StringzipFileName,StringextPlace){try{System.out.prin...
private static void extZipFileList(String zipFileName, String extPlace) {
try {
System.out.println("解压方法源文件:"+zipFileName);
System.out.println("解压方法地址:"+extPlace);
FileInputStream in = new FileInputStream(new File(zipFileName));
ZipInputStream zipInputStream = new ZipInputStream(in);
System.out.println("解压输入流的getNextEntry()值为:"+zipInputStream.getNextEntry());
ZipEntry entry = null;
while ((entry = zipInputStream.getNextEntry()) != null) {
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
System.out.println( "创建文件夹: " + entryName);
} else {
FileOutputStream os = new FileOutputStream(extPlace
+ entryName);
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
in.close();
zipInputStream.close();
}
}
} catch (IOException e) {
}
System.out.println("解压文件成功 ");
}
}
另一种方法代码:
private static void extZipFileList(String zipFileName, String extPlace) {
try {
System.out.println("解压方法源文件:"+zipFileName);
System.out.println("解压方法地址:"+extPlace);
ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
System.out.println("解压输入流的getNextEntry():"+extPlace);
ZipEntry entry = null;
// System.out.println(in.getNextEntry());
while ((entry = in.getNextEntry()) != null) {
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
System.out.println( "创建文件夹: " + entryName);
} else {
FileOutputStream os = new FileOutputStream(extPlace
+ entryName);
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
in.closeEntry();
}
}
} catch (IOException e) {
}
System.out.println("解压文件成功 ");
}
}
打印输出:
源文件:E:/temp_workspace/tmp/nms/ftp/EMS.rar
解压地址:E:/temp_workspace/tmp/nms/temp/
解压输入流的getNextEntry()值为:null
谁知道到底是什么问题?该怎么解决
rar格式的文件直接修改后缀名为zip是否可以转换成zip格式?如果是通过http协议下载rar格式的文件页面会直接打开,若直接改后缀名为zip的话,就会出现一个下载提示框 展开
try {
System.out.println("解压方法源文件:"+zipFileName);
System.out.println("解压方法地址:"+extPlace);
FileInputStream in = new FileInputStream(new File(zipFileName));
ZipInputStream zipInputStream = new ZipInputStream(in);
System.out.println("解压输入流的getNextEntry()值为:"+zipInputStream.getNextEntry());
ZipEntry entry = null;
while ((entry = zipInputStream.getNextEntry()) != null) {
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
System.out.println( "创建文件夹: " + entryName);
} else {
FileOutputStream os = new FileOutputStream(extPlace
+ entryName);
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
in.close();
zipInputStream.close();
}
}
} catch (IOException e) {
}
System.out.println("解压文件成功 ");
}
}
另一种方法代码:
private static void extZipFileList(String zipFileName, String extPlace) {
try {
System.out.println("解压方法源文件:"+zipFileName);
System.out.println("解压方法地址:"+extPlace);
ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
System.out.println("解压输入流的getNextEntry():"+extPlace);
ZipEntry entry = null;
// System.out.println(in.getNextEntry());
while ((entry = in.getNextEntry()) != null) {
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
System.out.println( "创建文件夹: " + entryName);
} else {
FileOutputStream os = new FileOutputStream(extPlace
+ entryName);
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
os.write(buf, 0, len);
}
os.close();
in.closeEntry();
}
}
} catch (IOException e) {
}
System.out.println("解压文件成功 ");
}
}
打印输出:
源文件:E:/temp_workspace/tmp/nms/ftp/EMS.rar
解压地址:E:/temp_workspace/tmp/nms/temp/
解压输入流的getNextEntry()值为:null
谁知道到底是什么问题?该怎么解决
rar格式的文件直接修改后缀名为zip是否可以转换成zip格式?如果是通过http协议下载rar格式的文件页面会直接打开,若直接改后缀名为zip的话,就会出现一个下载提示框 展开
3个回答
展开全部
我想代码基本没有错,可以解压zip文件
但你的输入文件是rar。
rar和zip是完全不同的算法。rar是商业压缩格式,zip是公开格式。
java的预置库目前无法直接解压rar ,需要用第三方库
但你的输入文件是rar。
rar和zip是完全不同的算法。rar是商业压缩格式,zip是公开格式。
java的预置库目前无法直接解压rar ,需要用第三方库
追问
呵呵,我刚也想可能是这个问题,但是修改了rar的后缀为zip,然后运行结果
解压方法源文件:E:/temp_workspace/tmp/nms/ftp/EMS.zip
解压方法地址:E:/temp_workspace/tmp/nms/temp/
解压输入流的getNextEntry()值为:null
解压文件成功
文件名:EMS.zip
我想可能成功了,结果一看,文件还是没有解压到目录中
追答
1、确保输入文件不是RAR。rar和zip的内容格式不一样,怎么可能因为“修改了rar的后缀为zip”而更改内容。
再次强调
“java的预置库目前无法直接解压rar ,需要用第三方库 ”
RAR和ZIP是两种有天壤之别的文件格式,
仅仅给rar文件改个zip文件名,是荒诞无意义的
2、刚刚没细看,代码有多处错误。
private static void extZipFileList(String zipFileName, String extPlace) {
try {
System.out.println("解压方法源文件:"+zipFileName);
System.out.println("解压方法地址:"+extPlace);
FileInputStream in = new FileInputStream(new File(zipFileName));
ZipInputStream zipInputStream = new ZipInputStream(in);
//错误 不能这么调试
//System.out.println("解压输入流的getNextEntry()值为:"+zipInputStream.getNextEntry());
ZipEntry entry = null;
while ((entry = zipInputStream.getNextEntry()) != null)
{
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File(extPlace + entryName);
file.mkdirs();
System.out.println( "创建文件夹: " + entryName);
} else {
FileOutputStream os = new FileOutputStream(extPlace
+ entryName);
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
//错误 用错流
while ((len = zipInputStream.read(buf)) > 0) {
os.write(buf, 0, len);
}
//错误 关错流
os.close();
}
}
//错误 关错流
//in.close();
zipInputStream.close();
} catch (Exception e) {
System.out.println("有错误");
e.printStackTrace();
}
System.out.println("解压文件成功 ");
}
========
以上代码已纠正,指出了纠正的地方
经测试可以用于解压zip文件
(原问题的范围是如何解压zip文件及纠正代码错误,已经符合题意。)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rar和zip的压缩算法都不一样,改个后缀就能变过来想的太天真
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用FileInputStream读文件到内存,然后用OutputStream输出到客户端,因为是二进制流操作,源文件是什么格式,输出的就是什么格式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询