首页 > 技术文章 > java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

zjfjava 2016-10-25 14:42 原文

将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class DirCopy {
    public static void main(String[] args) throws Exception{
        dirZipCopy("E:/source","F:/source.zip");
    }
    /**
     * 文件夹压缩备份
     * @param fromDir 要压缩备份的文件夹
     * @param toDir 压缩至的路径
     * @throws Exception
     */
    public static void dirZipCopy(String fromDir,String toDir) throws Exception{
        //创建ZIP输出流
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(toDir));
        //递归处理文件夹
        zipCopy(new File(fromDir),zos,"");
        zos.close();
    }
    /**
     * 压缩复制文件
     * @param fromDir 要压缩的文件
     * @param zos ZIP输出流
     * @param path 相对于ZIP文件的路径
     * @throws Exception
     */
    private static void zipCopy(File fromDir,ZipOutputStream zos,String path) throws Exception{
        if(fromDir.exists()){
            if(fromDir.isDirectory()){
                path += fromDir.getName()+"/";
                zos.putNextEntry(new ZipEntry(path));
                File[] files=fromDir.listFiles();
                if(files != null){
                    for(int i=0;i<files.length;i++){
                        zipCopy(files[i],zos,path);
                    }
                }
            }else{
                //putNextEntry():开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处。
                zos.putNextEntry(new ZipEntry(path+fromDir.getName()));
                InputStream is=new FileInputStream(fromDir);
                int len=0;
                byte[] b=new byte[1024];
                while((len=is.read(b))!=-1){
                    zos.write(b,0,len);
                    zos.flush();
                }
                is.close();
            }
        }
    }
}

 

文件复制

public class FileCopy2 {
    public static void main(String[] args) {
        fileCopy("F:/abc.rmvb", "F:/source/abc.rmvb");
    }
    public static void fileCopy(String srcFileSource,String destFileSource){
        try {
            //读取原文件内容
            FileInputStream in=new FileInputStream(srcFileSource);
            FileOutputStream out=new FileOutputStream(destFileSource);
            int len=0;
            byte[] indata=new byte[1024*10];
            while((len=in.read(indata))!=-1){
                out.write(indata);
            }
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

推荐阅读