Y(^_^)Y 2011-04-20 14:20
浏览 393
已采纳

java 压缩完了以后,原文件消失问题…………

package cn.com.taoge.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

public class ZipUtil {

/**
* 放弃,本代码压缩的时候会剪切文件。
* @param fileNames
*            the file name and directory information
*/
public static synchronized boolean zipFile(String[] fileNames) {
FileInputStream fis;
File zipFile = new File("D:sb.zip");
File file;
try {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(
zipFile));
for (int i = 0; i < fileNames.length; i++) {
int len;
file = new File(fileNames[i]);
fis = new FileInputStream(file);
zos.putNextEntry((org.apache.tools.zip.ZipEntry) new ZipEntry(fileNames[i]));
while ((len = fis.read()) != -1) {
zos.write(len);
}
fis.close();
file.delete();
}
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}

public static void main(String[] args) {
String[] strArray = { "E:/test/俯视.fla", "E:/aaa/片头.fla" };

zipFile(strArray);
}

}

能不能改成让源文件不消失的……急用

 

  • 写回答

3条回答

  • aiyust070 2011-04-20 15:23
    关注

    哥们儿,我给你改了改,你在看下:
    [code="java"]
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;

    public class ZipCompressor {

    static final int BUFFER = 8192;
    
    private File zipFile;
    private FileOutputStream fileOutputStream;
    private CheckedOutputStream cos;
    private ZipOutputStream out;
    
    /**
     * 构造函数
     * @param pathName
     */
    public ZipCompressor(String pathName) {
        zipFile = new File(pathName);
        try {
            fileOutputStream = new FileOutputStream(zipFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        cos = new CheckedOutputStream(fileOutputStream, new CRC32());
        out = new ZipOutputStream(cos);
    }
    private void destroy (){
    
        try {
            out.close();
            cos.close();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    
    /**
     * 向压缩包中添加一个文件或目录
     * @param srcPathName
     */
    public void compress(String srcPathName) {
        File file = new File(srcPathName);
        if (!file.exists())
            throw new RuntimeException(srcPathName + "不存在!");
        try {
            //FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
            //CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());
            //ZipOutputStream out = new ZipOutputStream(cos);
    
            String basedir = "";
            compress(file, this.out, basedir);
    
    
    
            //out.close();
            //cos.close();
            //fileOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            //throw new RuntimeException(e);
        }
    }
    
    
    private void compress(File file, ZipOutputStream out, String basedir) {
        /* 判断是目录还是文件 */
        if (file.isDirectory()) {
            System.out.println("压缩:" + basedir + file.getName());
            this.compressDirectory(file, out, basedir);
        } else {
            System.out.println("压缩:" + basedir + file.getName());
            this.compressFile(file, out, basedir);
        }
    }
    
    /** 压缩一个目录 */
    private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
        if (!dir.exists())
            return;
    
        File[] files = dir.listFiles();
        for (int i = 0; i < files.length; i++) {
            // 递归
            compress(files[i], out, basedir + dir.getName() + "/");
        }
        /*
         * File[] files = dir.listFiles(); for (int i = 0; i < files.length;
         * i++) { // 递归 compress(files[i], out, basedir + dir.getName() + "/");
         * }
         */
    }
    
    /** 压缩一个文件 */
    private void compressFile(File file, ZipOutputStream out, String basedir) {
    
        if (!file.exists()) {
            return;
        }
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            ZipEntry entry = new ZipEntry(basedir + file.getName());
            out.putNextEntry(entry);
            int count;
            byte data[] = new byte[BUFFER];
            while ((count = bis.read(data, 0, BUFFER)) != -1) {
                this.out.write(data, 0, count);
            }
            bis.close();
            out.closeEntry();
            //out.flush();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    /** 測試是否可以壓縮 */
    public static void main(String[] args) {
        ZipCompressor zc = new ZipCompressor("E:/test/szhzip.zip");
        String[] aa = { "E:/test/a.cs", "E:/test/b.cs", "E:/test/c.cs" };
        for (int i = 0; i < aa.length; i++) {
            zc.compress(aa[i]);
        }
        zc.destroy();
        System.out.println("OK....");
    
    }
    

    }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试