以下代码是以递归法压缩一个目录下的所有文件public class TZipFolder
{
public static void main(String[] args)
{
try
{
File f1=new File("E:\\dir");
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("F:\\dir.zip"));
ZipOutputStream zos=new ZipOutputStream(bos);
zipDir(f1,bos,zos);
zos.flush();
zos.finish();
zos.close();
bos.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void zipDir(File f,BufferedOutputStream bos,ZipOutputStream zos) throws IOException
{
File fList[]=f.listFiles();
FileInputStream fis=null;
BufferedInputStream bis=null;
if(fList!=null)
{
for(int i=0;i<fList.length;i++)
{
if(fList[i].isDirectory())
{
zipDir(fList[i],bos,zos);
}
else
{
fis=new FileInputStream(fList[i]);
bis=new BufferedInputStream(fis);
byte b[]=new byte[bis.available()];
bis.read();
zos.setMethod(ZipOutputStream.DEFLATED);
ZipEntry ze=new ZipEntry(fList[i].getName());
zos.putNextEntry(ze);
zos.write(b);
zos.flush();
//zos.finish();
System.out.println("file:"+fList[i].getAbsolutePath()+",size before:"+fis.available()+",size after:"+ze.getSize());
}
}
}
else
{
System.out.println("@@List end!!!");
}
fis.close();
bis.close();
}
}现在代码有三个问题1 压缩后的文件再解压,得到的文件和原来的文件大小一样,字节不差,但是就不能打开。
2 如果我源目录中还有子目录结构的,怎样把子目录的结构也在zip包中生成呢?现在这种算法是把源目录中所有的文件(包括它的子目录中的文件)都归在一个zip包的根目录下了。
3 怎样得到压缩后的ZipEntry的大小?会其中一个问题都可以回复。谢谢。
{
public static void main(String[] args)
{
try
{
File f1=new File("E:\\dir");
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("F:\\dir.zip"));
ZipOutputStream zos=new ZipOutputStream(bos);
zipDir(f1,bos,zos);
zos.flush();
zos.finish();
zos.close();
bos.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void zipDir(File f,BufferedOutputStream bos,ZipOutputStream zos) throws IOException
{
File fList[]=f.listFiles();
FileInputStream fis=null;
BufferedInputStream bis=null;
if(fList!=null)
{
for(int i=0;i<fList.length;i++)
{
if(fList[i].isDirectory())
{
zipDir(fList[i],bos,zos);
}
else
{
fis=new FileInputStream(fList[i]);
bis=new BufferedInputStream(fis);
byte b[]=new byte[bis.available()];
bis.read();
zos.setMethod(ZipOutputStream.DEFLATED);
ZipEntry ze=new ZipEntry(fList[i].getName());
zos.putNextEntry(ze);
zos.write(b);
zos.flush();
//zos.finish();
System.out.println("file:"+fList[i].getAbsolutePath()+",size before:"+fis.available()+",size after:"+ze.getSize());
}
}
}
else
{
System.out.println("@@List end!!!");
}
fis.close();
bis.close();
}
}现在代码有三个问题1 压缩后的文件再解压,得到的文件和原来的文件大小一样,字节不差,但是就不能打开。
2 如果我源目录中还有子目录结构的,怎样把子目录的结构也在zip包中生成呢?现在这种算法是把源目录中所有的文件(包括它的子目录中的文件)都归在一个zip包的根目录下了。
3 怎样得到压缩后的ZipEntry的大小?会其中一个问题都可以回复。谢谢。
还有参考一下 TrueZip工具包 的源码。
我曾经做过,时间太久忘记了。我的项目现在时间很紧,抱歉现在不能给出解决方法。
的长度