/**
*
*/
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 = "\n";
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();
}
}