我想解压缩所有文件夹和不同类型的文件,如.xls,.apk,.png等。但提取所有文件时,他们都是新提取的文件夹(或该文件夹下的文件夹)。但那些.xml,.png,.apk文件的格式不正确。当我打开时,xls文件显示弹出的格式可能不同,并且当它打开文件时所有内容都是不同的格式。 .png文件也无法打开,提取后.apk也没有用。为什么会这样? **
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipFiles {
public static void main(String a[]){
UnzipFiles mfe = new UnzipFiles();
mfe.unzipFile("E:/New folder/pics.zip");
}
public void unzipFile(String filePath){
FileInputStream fis = null;
ZipInputStream zipIs = null;
ZipEntry zEntry = null;
try {
fis = new FileInputStream(filePath);
zipIs = new ZipInputStream(new BufferedInputStream(fis));
while((zEntry = zipIs.getNextEntry()) != null){
try{
byte[] tmp = new byte[25*1024*1024];
FileOutputStream fos = null;
/*String opFilePath = "E:/New folder/new/"+zEntry.getName();*/
String opFilePath= "E:/New folder/new"+File.separator+zEntry.getName();
File f = new File( opFilePath);
if(zEntry.isDirectory())
{ f.mkdirs();
System.out.println(f.getName()+" "+"folder created");
}
else{
System.out.println(f.getName());
/*System.out.println("Extracting file to "+opFilePath);*/
fos = new FileOutputStream(f);
BufferedOutputStream out = new BufferedOutputStream(fos);
int size = 0;
int k= zipIs.read(tmp);
System.out.println(k+1);
while((size = zipIs.read(tmp)) != -1){
out.write(tmp, 0 , size);
}
}
} catch(Exception ex){
ex.printStackTrace();
}
}
zipIs.closeEntry();
zipIs.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException exc) {
// TODO Auto-generated catch block
exc.printStackTrace();
}
}
}
**
答案 0 :(得分:2)
您忘记将您读取的第一个字节放入目标文件中:
int k= zipIs.read(tmp); // <--- HERE
System.out.println(k+1);
while((size = zipIs.read(tmp)) != -1){
out.write(tmp, 0 , size);
此外,如果您使用Java 7,请使用ZIP FileSystem
以及Files.walkFileTree()
;这将使你的工作更多更简单!