一个创业者的blog

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
1楼  btut2004   ( 零散http://www.0san.com)  回复于  2004-08-27 17:15:16  得分  10

严重关注
Top
2楼  fuguanyoumc   ( 知秋一叶)  回复于  2004-08-27 17:18:08  得分  10

深度关切,^_^
Top
3楼  boykent   ( 一路狂飙)  回复于  2004-08-27 17:33:45  得分  10

丁页
Top
4楼  zhqi   ( 全国第三)  回复于  2004-08-27 18:58:44  得分 0


        感谢大家,第二个问题自己解决了,果然是二进制问题,BufferedReader是基于Char的,将BufferedReader替换成基于Byte的FileInputStream马上就好了,如下:

        //BufferedReader   in   =   new   BufferedReader(new   FileReader(fileName[i]));
            FileInputStream   in   =   new   FileInputStream(new   File(fileName[i]));


        大伙快帮忙,还有第一个问题呢。
Top
5楼  kerry2008   ( kerry)  回复于  2004-08-27 19:12:41  得分  10

我会的话一定告诉你。
Top
6楼  iceandfire   ( 【咖啡沫】)  回复于  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());
}
}
}
Top
7楼  a10002   ( A万零贰)  回复于  2004-08-27 22:46:29  得分  10

如果文件的路径是绝对路径的话!则可以使用当前目录!
不知文件的路径指的是什么?

你可能感兴趣的:(一个创业者的blog)