SQnote
永远有多远……
SQnote - java,web优化,python,(www.sqnote.cn)
http://www.blogjava.net/soochow_hhb/

问题一:用java.util.zip类压缩文件的时候会把文件的路径一起压到压缩包里,请教大家如何只压文件而忽略路径?

问题二:压一些较大的文件时非常容易出错(java并不报错,生成的压缩包打不开),我怀疑是因为二进制文件的问题,我是参考《java编程思想》里的例程做的(代码见下),如果是二进制问题,请教大家如何压缩二进制文件。

先谢谢啦。

问题二的代码:

    public   void   zipFiles(String[]   fileName){
        try{
            FileOutputStream   f   =   new   FileOutputStream("c:\\cl.zip");
            CheckedOutputStream   csum   =   new   CheckedOutputStream(f,new   Adler32());
            ZipOutputStream   out   =   new   ZipOutputStream(new   BufferedOutputStream(csum));
            for(int   i=0;i<fileName.length;i++){
                BufferedReader   in   =   new   BufferedReader(new   FileReader(fileName[i]));
                out.putNextEntry(new   ZipEntry(fileName[i]));
                int   c;
                while((c   =   in.read())   !=   -1){
                    out.write(c);
                }
                in.close();
            }
            out.close();
        }catch(IOException   e){
            System.out.println(e.getMessage());
        }
    }


问题点数:100、回复次数:7
6楼  iceandfire   (【咖啡沫】) 五级用户 该版得分小于等于5000分,大于2000分  回复于 2004-08-27 22:11:45  得分 50

不知道兄台是否要这样的东西?

/**
  *   @(#)   ZipFile.java
  *
  *   Copyright   2004   Opensource   Develop   Team.   All   rights   reserved.
  */
package   com.opensource.zip;

import   java.io.File;
import   java.io.FileInputStream;
import   java.io.FileOutputStream;
import   java.io.IOException;
import   java.util.ArrayList;
import   java.util.List;
import   java.util.zip.ZipEntry;
import   java.util.zip.ZipOutputStream;

/**
  *   在CSDN帖子http://community.csdn.net/Expert/topic/3316/3316352.xml?temp=.2301905中看到
  *   关于ZIP压缩文件的问题,在该类中主要演示在ZIP压缩中可以不把文件路径压缩进去
  *  
  *   @author   O.D.T
  *   @version   1.0   04/08/27
  */
public   class   ZipFile
{
public   static   void   main(String[]   args)
{
ArrayList   fileNames   =   new   ArrayList();   //   存放文件名,并非含有路径的名字
ArrayList   files   =   new   ArrayList();   //   存放文件对象

try
{
FileOutputStream   fileOut   =   new   FileOutputStream("E:/ZipOutOfPath.zip");
ZipOutputStream   outputStream   =   new   ZipOutputStream(fileOut);

File   rootFile   =   new   File("E:/temp");
listFile(rootFile,   fileNames,   files);

for   (int   loop=0;   loop<files.size();   loop++)
{
FileInputStream   fileIn   =   new   FileInputStream((File)files.get(loop));
outputStream.putNextEntry(new   ZipEntry((String)fileNames.get(loop)));
byte[]   buffer   =   new   byte[1024];
while   (fileIn.read(buffer)   !=   -1)
{
outputStream.write(buffer);
}

outputStream.closeEntry();
fileIn.close();
}

outputStream.close();
}
catch   (IOException   ioe)
{
ioe.printStackTrace();
}
}

static   void     listFile(File   parentFile,   List   nameList,   List   fileList)
{
if   (parentFile.isDirectory())
{
File[]   files   =   parentFile.listFiles();
for   (int   loop=0;   loop<files.length;   loop++)
{
listFile(files[loop],   nameList,   fileList);
}
}
else
{
fileList.add(parentFile);
nameList.add(parentFile.getName());
}
}
}
posted on 2006-03-29 10:18  SQnote·www.SQnote.cn  阅读(458)  评论(0编辑  收藏  举报