问题描述
|
我正在尝试编写如下的Java ZIP util类:
package fdbank.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 解压缩工具类
* @author ggfan@amarsoft
*
*/
public class ZIPUtil {
private static void zip(File[] files,String dest) throws IOException{
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(\"dest\")));
for(File file : files){
zip(file,zos);
}
zos.close();
}
private static void zip(File file,ZipOutputStream zos) throws IOException{
byte[] buf = new byte[2048];
@SuppressWarnings(\"unused\")
int bytes = 0;
if(file.isDirectory()){
ZipEntry entry = new ZipEntry(file.getName());
zos.putNextEntry(entry);
for(File subFile : file.listFiles()){
zip(subFile,zos);
}
zos.closeEntry();
}
FileInputStream fis = new FileInputStream(file);
System.out.println(file.getName());
ZipEntry entry = new ZipEntry(file.getName());
zos.putNextEntry(entry);
while((bytes = fis.read(buf)) != -1){
zos.write(buf);
}
zos.closeEntry();
fis.close();
}
public static void compress(int archiveType,File[] files,String dest){
}
public static void main(String[] args){
try {
System.out.println(\"gan !!!!\");
zip(new File[]{new File(\"F:\\\\ziptest\\\\1.bmp\")},\"c:\\\\ziptest.zip\");
} catch (IOException e) {
e.printstacktrace();
}
}
}
我运行它,没有错误,但根本没有创建zip文件!!!
我的代码有什么问题?
解决方法
您始终在写入名为“ dest”的文件,而忽略名为
dest
(值为c:\\ziptest.zip
)的with1ѭ参数。
在第一个zip()
方法的第一行中,将\"dest\"
替换为dest
。
另外:您不能忽略fis.read()
的返回值:如果read()
没有填充缓冲区buf
,那么您必须告诉相应的write()
调用:
while((bytes = fis.read(buf)) != -1){
zos.write(buf,bytes);
}