感谢大家,第二个问题自己解决了,果然是二进制问题,BufferedReader是基于Char的,将BufferedReader替换成基于Byte的FileInputStream马上就好了,如下:    //BufferedReader in = new BufferedReader(new FileReader(fileName[i]));
      FileInputStream in = new FileInputStream(new File(fileName[i]));
    大伙快帮忙,还有第一个问题呢。

解决方案 »

  1.   

    不知道兄台是否要这样的东西?/**
     * @(#) 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());
    }
    }
    }