zoukankan      html  css  js  c++  java
  • java文件处理之压缩,分割

    http://blog.csdn.net/ycg01/article/details/1366648

     

    java文件处理之压缩,分割

    标签: javaexceptionimportnullbytefile
     分类:
     

    一.简单文件压缩,解压

    package cn.edu.nju.vicken;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipOutputStream;

    /**
     * 
     * @author VickenYang
     * 文件处理工具
     */
    public class FileProcessor {
        
        public static void createZipFile(File from,File to) throws Exception {
            if(!from.isFile()){
                throw new Exception("file not exists"+from.getAbsolutePath());
            }
            if(to.isFile()){
                throw new Exception("file already exists"+to.getAbsolutePath());
            }
            else{
                to.createNewFile();
            }
            
            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(to));
            ZipEntry ze = null;
            byte[] buf = new byte[1024];
            int readLen = 0;
            ze = new ZipEntry(from.getAbsolutePath());
            ze.setSize(from.length());
            ze.setTime(from.lastModified());
            zos.putNextEntry(ze);
            InputStream is = new BufferedInputStream(new FileInputStream(from));
            while ((readLen=is.read(buf, 0, 1024))!=-1) {
                zos.write(buf, 0, readLen);
            }
            is.close();
            zos.close();
        }
        
        public static void decompressZipFile(File from,File to) throws Exception{
            if(!from.isFile()){
                throw new Exception("file not exists"+from.getAbsolutePath());
            }
            if(!to.isDirectory()){
                throw new Exception("file not directory"+to.getAbsolutePath());
            }
            ZipFile zfile = new ZipFile(from.getAbsoluteFile());
            Enumeration zList = zfile.entries();
            ZipEntry ze=null;
            byte[] buf=new byte[1024];
            while(zList.hasMoreElements()){
                ze=(ZipEntry)zList.nextElement();
                if(ze.isDirectory()){
                    continue;
                }
                String[] zet = ze.getName().replace('/', '/').split("/");
                OutputStream os=new BufferedOutputStream(new FileOutputStream(to.getAbsoluteFile()+zet[zet.length-1]));
                InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
                int readLen=0;
                while ((readLen=is.read(buf, 0, 1024))!=-1) {
                    os.write(buf, 0, readLen);
                }
                is.close();
                os.close();
            }
            zfile.close();
        }
    }

     二.定时器程序

    import java.util.Timer;
    import java.util.TimerTask;
    class MyTask extends TimerTask{
        String name;
        public MyTask(String name){
            this.name = name;
        }
        public void run(){
            System.out.println(name);
        }
    }
    public class TestTask {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            TimerTask task = new MyTask("10秒执行一次");
            java.util.Date today = new java.util.Date();
            //开始时间设置为昨天
            java.util.Date beginTime = new java.util.Date(today.getYear(),today.getMonth(),today.getDate()-1,22,0,0);
            //10秒一次
            new Timer().schedule(task,beginTime,1000*10);
            //执行一次
            task = new MyTask("只执行一次");
            new Timer().schedule(task,beginTime);
        }
    }

    三.分割,合并文件

    //拆分文件
        public static void splitFile(File file,int size) throws Exception{
            if(size<=0){
                size = 1024;
            }
            if(!file.isFile()){
                throw new Exception("file not exists"+file.getAbsolutePath());
            }
            String filename = file.getAbsolutePath();
            File filetmp = new File(filename+"_"+0+".vk");
            if(filetmp.isFile()){
                throw new Exception("file exists"+filetmp.getAbsolutePath());
            }
            
            byte[] buf = new byte[1024*10];
            FileInputStream fis = new FileInputStream(file);
            int readsize = 0;
            int pos = 0;
            int k = 0;
            int m = -1;
            File fileout = null;
            FileOutputStream fos = null;
            while((readsize = fis.read(buf, 0, buf.length))>0){
                
                if(k!=m)
                {
                    if(fos!=null){
                        fos.close();
                        fos = null;
                    }
                    m = k;
                    fileout = new File(filename+"_"+k+".vk");
                    fos = new FileOutputStream(fileout);
                }
                fos.write(buf,0,readsize);
                fos.flush();
                pos += readsize;
                if(pos>size*(k+1)){
                    k++;
                }
            }
            if(fos!=null){
                fos.close();
                fos = null;
            }
            fis.close();
        }
        
        
        //合并文件
        public static void combination(File file) throws Exception{
            String filename = file.getAbsolutePath();
            File fileout = new File(filename);
            
            if(fileout.isFile()){
                throw new Exception("file exists"+fileout.getAbsolutePath());
            }
            FileOutputStream fos = new FileOutputStream(fileout);
            int k = 0;
            File filein = null;
            FileInputStream fis = null;
            byte[] buf = new byte[1024*10];
            while(true){
                if(fis!=null){
                    fis.close();
                    fis = null;
                }
                filein = new File(filename+"_"+k+".vk");
                if(!filein.isFile()){
                    break;
                }
                fis = new FileInputStream(filein);
                int readsize = 0;
                while((readsize = fis.read(buf, 0, buf.length))>0){
                    fos.write(buf,0,readsize);
                    fos.flush();
                }
                k++;
            }
            if(fis!=null){
                fis.close();
                fis = null;
            }
            fos.close();
        }
  • 相关阅读:
    C#基础
    自动化测试
    C# 数据结构题目
    .NET基础知识
    Sharepoint题目
    题目总结2
    数据库索引
    题目总结(2014-1-10)
    Stack详解
    SpringBoot入门基础知识点
  • 原文地址:https://www.cnblogs.com/donaldlee2008/p/5312118.html
Copyright © 2011-2022 走看看