这里记录下两种压缩类型文件的解压及解析。
一、.zip
/**
* 扩展资源类型
* @param file
*/
public void getExpandResourceTypeZip( MultipartFile file,Long resourceId,Long productModelId,Long resourceType,File f) throws Exception{
//定义三种集合
List<ResultPloy> getFileList =new ArrayList<>();
List<ResultPloy> getFileNameList =new ArrayList<>();
List<ResultPloy> readIniFileList =new ArrayList<>();
Long platform = tbProductModelMapper.selectResourcePlatformByModelId(productModelId);
//根据资源类型和平台读取策略
List<TbExpandPloy> tbExpandPloys = tbExpandPloyMapper.queryExpandPloyByTypeAndPlat(resourceType, platform);
if (!ObjectUtils.isEmpty(tbExpandPloys)){
//匹配策略
for (TbExpandPloy p : tbExpandPloys) {
List<ResourceExpandPloy> ployList = JSONArray.parseArray(p.getRules(), ResourceExpandPloy.class);
//期望文件名结果
List<String> resultFileNames =new ArrayList<>();
for (ResourceExpandPloy ploy : ployList) {
String replace = ploy.getRule().replaceFirst("/", "").replace("/i", "");
String[] split = replace.split("\\|");
for (String s : split) {
resultFileNames.add(s);
}
ResultPloy resultPloy = new ResultPloy();
resultPloy.setResourceExtendTypeId(Long.valueOf(p.getResourceExpandType()));
if (Objects.equals("getFile",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
getFileList.add(resultPloy);
}
if (Objects.equals("getFileName",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
getFileNameList.add(resultPloy);
}
if (Objects.equals("readIniFile",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
resultPloy.setAttr(ploy.getAttr());
readIniFileList.add(resultPloy);
}
}
}
List<TbTestResourceExtend> tbTestResourceExtendList = new ArrayList<>();
//解压后路径文件夹--区分是否为重新解析
String resName = null;
if (file != null){
resName = file.getOriginalFilename();
}else {
resName = f.getName();
String substring = resName.substring(resName.lastIndexOf("_"), resName.lastIndexOf("."));
resName = resName.replace(substring, "");
}
File srcFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" +resName);
if (file != null){
FileUtils.copyInputStreamToFile(file.getInputStream(), srcFile);
}
// 判断源文件是否存在
if (!srcFile.exists()) {
throw new ServiceException(srcFile.getPath() + "所指文件不存在");
}
ZipFile zipFile = new ZipFile(srcFile, Charset.forName("GBK"));//创建压缩文件对象
//开始解压
Enumeration<?> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
// 如果是文件夹,就创建个文件夹 && entry.getName().contains(file.getOriginalFilename())
if (entry.isDirectory()) {
String dirPath = RuoYiConfig.getProfile() + "/"+res+"/" + entry.getName();
srcFile.mkdirs();
} else {
// 如果是文件,就先创建一个文件,然后用io流把内容copy过去
File targetFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" + entry.getName());
//getFileList
if (!ObjectUtils.isEmpty(getFileList)){
for (ResultPloy resultPloy : getFileList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(targetFile.getName());
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
//getFileNameList
if (!ObjectUtils.isEmpty(getFileNameList)){
for (ResultPloy resultPloy : getFileNameList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(targetFile.getName().substring(0, targetFile.getName().lastIndexOf(".")));
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
// 保证这个文件的父文件夹必须要存在
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
targetFile.createNewFile();
// 将压缩文件内容写入到这个文件中
InputStream is = zipFile.getInputStream(entry);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String content = null;
while ((content = br.readLine()) != null) {
//一行一行读取内容
if (!ObjectUtils.isEmpty(readIniFileList) && !StringUtils.isEmpty(content) && content.contains("=")){
for (ResultPloy resultPloy : readIniFileList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
String attr = resultPloy.getAttr();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue) && content.contains(attr)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(content.substring(content.lastIndexOf("=")+1));
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
}
is.close();
}
}
//批量入库
if (!ObjectUtils.isEmpty(tbTestResourceExtendList)){
tbTestResourceExtendMapper.insertBatch(tbTestResourceExtendList);
}
}
}
二、.7z
/**
* 7z
* @param file
* @param resourceId
* @param productModelId
* @param resourceType
* @throws Exception
*/
public void getExpandResourceType7z(MultipartFile file,Long resourceId,Long productModelId,Long resourceType,File f) throws Exception{
//定义三种集合
List<ResultPloy> getFileList =new ArrayList<>();
List<ResultPloy> getFileNameList =new ArrayList<>();
List<ResultPloy> readIniFileList =new ArrayList<>();
Long platform = tbProductModelMapper.selectResourcePlatformByModelId(productModelId);
//根据资源类型和平台读取策略
List<TbExpandPloy> tbExpandPloys = tbExpandPloyMapper.queryExpandPloyByTypeAndPlat(resourceType, platform);
if (!ObjectUtils.isEmpty(tbExpandPloys)){
//匹配策略
for (TbExpandPloy p : tbExpandPloys) {
List<ResourceExpandPloy> ployList = JSONArray.parseArray(p.getRules(), ResourceExpandPloy.class);
//期望文件名结果
List<String> resultFileNames =new ArrayList<>();
for (ResourceExpandPloy ploy : ployList) {
String replace = ploy.getRule().replaceFirst("/", "").replace("/i", "");
String[] split = replace.split("\\|");
for (String s : split) {
resultFileNames.add(s);
}
ResultPloy resultPloy = new ResultPloy();
resultPloy.setResourceExtendTypeId(Long.valueOf(p.getResourceExpandType()));
if (Objects.equals("getFile",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
getFileList.add(resultPloy);
}
if (Objects.equals("getFileName",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
getFileNameList.add(resultPloy);
}
if (Objects.equals("readIniFile",ploy.getGet())){
resultPloy.setResourceExtendValue(resultFileNames);
resultPloy.setAttr(ploy.getAttr());
readIniFileList.add(resultPloy);
}
}
}
List<TbTestResourceExtend> tbTestResourceExtendList = new ArrayList<>();
//解压后路径文件夹--区分是否为重新解析
String resName = null;
if (file != null){
resName = file.getOriginalFilename();
}else {
resName = f.getName();
String substring = resName.substring(resName.lastIndexOf("_"), resName.lastIndexOf("."));
resName = resName.replace(substring, "");
}
File srcFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" +resName);
if (file != null){
FileUtils.copyInputStreamToFile(file.getInputStream(), srcFile);
}
// 判断源文件是否存在
if (!srcFile.exists()) {
throw new ServiceException(srcFile.getPath() + "所指文件不存在");
}
//----------------7z开始解压-=================
SevenZFile zIn = new SevenZFile(srcFile);
SevenZArchiveEntry entry = null;
while ((entry = zIn.getNextEntry()) != null) {
if (entry.isDirectory()) {
srcFile.mkdirs();
}else {
File targetFile = new File(RuoYiConfig.getProfile() + "/"+res+"/" + entry.getName());
//getFileList
if (!ObjectUtils.isEmpty(getFileList)){
for (ResultPloy resultPloy : getFileList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(targetFile.getName());
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
//getFileNameList
if (!ObjectUtils.isEmpty(getFileNameList)){
for (ResultPloy resultPloy : getFileNameList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(targetFile.getName().substring(0, targetFile.getName().lastIndexOf(".")));
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
if (!targetFile.getParentFile().exists()) {
targetFile.getParentFile().mkdirs();
}
targetFile.createNewFile();
OutputStream out = new FileOutputStream(targetFile);
BufferedOutputStream bos = new BufferedOutputStream(out);
int len = -1;
byte[] buf = new byte[1024];
while ((len = zIn.read(buf)) != -1) {
bos.write(buf, 0, len);
}
// 关流顺序,先打开的后关闭--必须先关闭再读取
bos.close();
out.close();
//以行读取数据
InputStream is = new FileInputStream(targetFile);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String content = null;
while ((content = br.readLine()) != null) {
//一行一行读取内容
if (!ObjectUtils.isEmpty(readIniFileList) && !StringUtils.isEmpty(content) && content.contains("=")){
for (ResultPloy resultPloy : readIniFileList) {
List<String> resourceExtendValueList = resultPloy.getResourceExtendValue();
String attr = resultPloy.getAttr();
for (String resourceExtendValue : resourceExtendValueList) {
if (targetFile.getName().contains(resourceExtendValue) && content.contains(attr)){
TbTestResourceExtend tbTestResourceExtend = new TbTestResourceExtend();
tbTestResourceExtend.setResourceId(resourceId);
tbTestResourceExtend.setResourceExtendTypeId(resultPloy.getResourceExtendTypeId());
tbTestResourceExtend.setResourceExtendValue(content.substring(content.lastIndexOf("=")+1));
tbTestResourceExtendList.add(tbTestResourceExtend);
}
}
}
}
}
is.close();
}
}
//批量入库
if (!ObjectUtils.isEmpty(tbTestResourceExtendList)){
tbTestResourceExtendMapper.insertBatch(tbTestResourceExtendList);
}
}
};