zoukankan      html  css  js  c++  java
  • 文件压缩流工具类

    /**
     * 
     */
    package com.hdrs.ris.law2.large.xml.utils;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    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 java.util.zip.ZipOutputStream;
    
    import org.apache.commons.io.FileUtils;
    
    /**
     * @project_name aml_second
     * @package_name com.hdrs.ris.law2.large.xml.utils
     * @class_name WriteXmlAndZipUtil
     * @author 邵欣
     * @company 新致软件
     * @version 1.0
     * @time 2017年9月12日 下午3:10:34
     */
    public class WriteXmlAndZipUtil implements deleteFile {
        public static String UTF8 = "<?xml version="1.0" encoding="UTF-8"?>";
    
        public static String GBK = "<?xml version="1.0" encoding="GBK"?>";
    
        public static String GB18030 = "<?xml version="1.0" encoding="GB18030"?>";
    
        public static String NEWLINE = "
    ";
    
        public static String N = "N";// 普通报文
    
        public static String R = "R";// 重发报文
    
        public static String A = "A";// 补报报文
    
        public static String C = "C";// 纠错报文
    
        public static String I = "I";// 补正报文
    
        public static String D = "D";// 删除错误报文(只有保险业大额交易报告有此类型)
    
        public static String IH = "IH";// 保险业大额
    
        public static String IS = "IS";// 保险业可疑
    
        public static String XML = ".xml";// xml后缀
    
        public static String ZIP = ".ZIP";// zip文件后缀
    
        public static String SEG = "-";// zip文件分隔符
    
        /**
         * 生成ZIP文件
         * 
         * @param filePath
         *            文件根路径
         * @param zipFileName
         *            压缩文件名
         * @param xmlFileName
         *            xml文件名
         * @param xmlHead
         *            xml文件头
         * @param xmlBody
         *            xml文件体 void
         * @author 邵欣
         * @time 2017年9月12日下午6:49:27
         */
        public static void writeZIPFile(String filePath, String dirFileName, String xmlHead, String xmlBody) {
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            BufferedOutputStream bos = null;
            File sourceFile = new File(filePath + dirFileName);// 文件夹路径及文件夹名称
            if (sourceFile.exists() == false) {
                System.out.println("待压缩的文件目录:" + dirFileName + "不存在.");
            } else {
                try {
                    File zipFile = new File(filePath + dirFileName + WriteXmlAndZipUtil.ZIP);// 压缩文件名称及其存储位置
                    if (zipFile.exists()) {
                        System.out.println(filePath + "目录下存在名字为:" + dirFileName + ".zip" + "打包文件.");
                    } else {
                        File[] sourceFiles = sourceFile.listFiles();
                        if (null == sourceFiles || sourceFiles.length < 1) {
                            System.out.println("待压缩的文件目录:" + dirFileName + "里面不存在文件,无需压缩.");
                        } else {
                            fos = new FileOutputStream(zipFile);
                            bos = new BufferedOutputStream(fos);
                            zos = new ZipOutputStream(bos);
                            byte[] bufs = new byte[1024 * 10];
                            for (int i = 0; i < sourceFiles.length; i++) {
                                ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());// 创建ZIP实体
                                zos.putNextEntry(zipEntry);// 添加进压缩包
                                fis = new FileInputStream(sourceFiles[i]); // 读取待压缩的文件并写进压缩包里
                                bis = new BufferedInputStream(fis, 1024 * 10);
                                int read = 0;
                                while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {
                                    zos.write(bufs, 0, read);// 写入压缩文件
                                }
                                if (null != bis) {// 关闭字符缓冲输出流
                                    bis.close();
                                }
                                if (null != fis) {// 关闭文件输出流
                                    fis.close();
                                }
                            }
                        }
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                } finally {
                    // 关闭流
                    try {
                        if (null != zos) {// 关闭压缩输入流
                            zos.close();
                        }
                        if (null != bos) {// 关闭字符缓冲输入流
                            bos.close();
                        }
                        if (null != fos) {// 关闭文件输出流
                            fos.close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        throw new RuntimeException(e);
                    }
                }
            }
            if (sourceFile.exists() == false) {
                System.out.println("目录不存在!");
            } else {
                deleteFile(sourceFile);// 删除临时文件夹及其子目录文件
            }
        }
    
        /**
         * 删除临时文件
         * 
         * @param sourceFile
         *            临时文件夹名称 void
         * @author 邵欣
         * @time 2017年9月13日下午2:01:45
         */
        private static void deleteFile(File sourceFile) {
            File[] sourceFiles = sourceFile.listFiles();
            for (int i = 0; i < sourceFiles.length; i++) {
                sourceFiles[i].delete();// 删除文件夹内部文件
            }
            sourceFile.delete();// 删除文件夹
        }
    
        /**
         * 生成xml文件
         * 
         * @param filePath
         *            生成的文件路径
         * @param dirFileName
         *            生成的文件夹名称
         * @param xmlFileName
         *            xml文件名称
         * @param xmlHead
         *            xml文件头选择编码格式
         * @param xmlBody
         *            xml文件内容 void
         * @author 邵欣
         * @time 2017年9月13日上午9:22:26
         */
        public static void writeXMLFile(String filePath, String dirFileName, String xmlFileName, String xmlHead,
                String xmlBody) {
            try {
                File file = new File(filePath + dirFileName + "/" + xmlFileName);// 生成文件路径
                FileUtils.writeStringToFile(file, xmlBody);// 生成文件内容
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 拿到xml文件名称
         * 
         * @param msgType
         *            报文类型标识
         * @param safeType
         *            交易报告类型标识
         * @param companyNum
         *            报告机构编码
         * @param dateTime
         *            报送日期
         * @param packageNum
         *            当日报送的批次
         * @param fileNum
         *            报文在该批次的编号
         * @return String 
         * @author 邵欣
         * @time 2017年9月13日下午1:58:24
         */
        public static String getXmlFileName(String msgType, String safeType, String companyNum, String dateTime,
                String packageNum, String fileNum) {
            // NIS031021101020001-20070306-0049-0021.XML
            // 报文类型和交易报告类型标识+报告机构编码+报送日期+当日报送的批次+报文在该批次的编号.XML
            StringBuffer sb = new StringBuffer();
            if (msgType != null) {
                sb.append(msgType);
                if (safeType != null) {
                    sb.append(safeType);
                    if (companyNum != null) {
                        sb.append(companyNum + WriteXmlAndZipUtil.SEG);
                        if (dateTime != null) {
                            sb.append(dateTime + WriteXmlAndZipUtil.SEG);
                            if (packageNum != null) {
                                sb.append(packageNum + WriteXmlAndZipUtil.SEG);
                                if (fileNum != null) {
                                    sb.append(fileNum + WriteXmlAndZipUtil.XML);
                                } else {
                                    throw new RuntimeException("NollPointException : fileNum");
                                }
                            } else {
                                throw new RuntimeException("NollPointException : packageNum");
                            }
                        } else {
                            throw new RuntimeException("NollPointException : dateTime");
                        }
                    } else {
                        throw new RuntimeException("NollPointException : companyNum");
                    }
                } else {
                    throw new RuntimeException("NollPointException : safeType");
                }
            } else {
                throw new RuntimeException("NollPointException : msgType");
            }
            return sb.toString();
        }
    
        /**
         * 获取文件名称
         * 
         * @param msgType
         *            数据包类型标识
         * @param safeType
         *            交易报告类型标识
         * @param companyNum
         *            报告机构编码
         * @param dateTime
         *            报送日期
         * @param batchNum
         *            当日报送的批次
         * @return String
         * @author 邵欣
         * @time 2017年9月13日上午9:28:16
         */
        public static String getDirFileName(String msgType, String safeType, String companyNum, String dateTime,
                String batchNum) {
            // 数据包类型和交易报告类型标识+报告机构编码+报送日期+当日报送的批次.ZIP
            // 数据包名称的各部分之间用“-”(半角)分隔。
            StringBuffer sb = new StringBuffer();
            if (msgType != null) {
                sb.append(msgType);
                if (safeType != null) {
                    sb.append(safeType);
                    if (companyNum != null) {
                        sb.append(companyNum + WriteXmlAndZipUtil.SEG);
                        if (dateTime != null) {
                            sb.append(dateTime + WriteXmlAndZipUtil.SEG);
                            if (batchNum != null) {
                                sb.append(batchNum);
                            } else {
                                throw new RuntimeException("NollPointException : batchNum");
                            }
                        } else {
                            throw new RuntimeException("NollPointException : dateTime");
                        }
                    } else {
                        throw new RuntimeException("NollPointException : companyNum");
                    }
                } else {
                    throw new RuntimeException("NollPointException : safeType");
                }
            } else {
                throw new RuntimeException("NollPointException : msgType");
            }
            return sb.toString();
        }
    
    }
  • 相关阅读:
    接口测试总结
    在 github 上获取源码
    推荐一个css帮助手册的版本 同时提供chm和在线
    由csdn开源项目评选中闹出刷票问题想到投票程序的设计
    由一个园友因为上传漏洞导致网站被攻破而得到的教训
    让 SVN (TortoiseSVN)提交时忽略bin和obj目录
    未能进入中断模式,原因如下:源文件“XXXXXX”不属于正在调试的项目。
    未能加载文件或程序集“XXXXX”或它的某一个依赖项。试图加载格式不正确的程序。
    .Net AppDomain.CurrentDomain.AppendPrivatePath(@"Libs");
    C# Remoting的一个简单例子
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7514669.html
Copyright © 2011-2022 走看看