diff --git a/build.gradle b/build.gradle index 6166542..c4a708d 100644 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ uploadArchives { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) } pom.project { - version '1.2.1' + version '1.2.2' artifactId ARTIFACT_Id groupId GROUP_ID packaging TYPE diff --git a/src/main/java/com/taover/util/ToolsCharset.java b/src/main/java/com/taover/util/ToolsCharset.java new file mode 100644 index 0000000..31a4678 --- /dev/null +++ b/src/main/java/com/taover/util/ToolsCharset.java @@ -0,0 +1,176 @@ +package com.taover.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class ToolsCharset { + /** + * 检查是否utf编码文件 + * @param dataFile + * @return + * @throws Exception + */ + public static boolean isUtf8File(File dataFile) throws Exception{ + if(!dataFile.exists()) { + throw new Exception("file not found"); + } + byte[] dataBuffer = readFileToByteArr(dataFile); + return isUtf8(dataBuffer, dataBuffer.length); + } + + /** + * 检查是否gbk编码文件 + * @param dataFile + * @return + * @throws Exception + */ + public static boolean isGBKFile(File dataFile) throws Exception{ + if(!dataFile.exists()) { + throw new Exception("file not found"); + } + byte[] dataBuffer = readFileToByteArr(dataFile); + return isGBK(dataBuffer, dataBuffer.length); + } + + private static byte[] readFileToByteArr(File dataFile) throws IOException { + FileInputStream fileIS = new FileInputStream(dataFile); + int estimateLen = (int)(fileIS.available() * 1.2); + ByteArrayOutputStream arrStream = new ByteArrayOutputStream(estimateLen); + byte[] buffer = null; + try { + int readLen = -1; + buffer = new byte[estimateLen]; + while((readLen = fileIS.read(buffer)) != -1) { + arrStream.write(buffer, 0, readLen); + } + buffer = arrStream.toByteArray(); + }catch (Exception e) { + throw e; + }finally { + arrStream.close(); + fileIS.close(); + } + return buffer; + } + + /** + * 字符集格式,参见: + * http://jszx.cuit.edu.cn/NewsCont.asp?bm=00&type=1009&id=20575 + * 参考实现: + * https://www.cnblogs.com/Toney-01-22/p/9935297.html + * @param contentByte + * @return + */ + public static boolean isUtf8(byte[] contentByte, int length) { + //System.out.println("DATA>>>\n"+Hex.encodeHexString(contentByte)); + + int nBytes = 0;//UFT8可用1-6个字节编码,ASCII用一个字节 + boolean bAllAscii = true; + + for (int i=0; i= 0x80) { + if (chr >= 0xFC && chr <= 0xFD) { + nBytes = 6; + } else if (chr >= 0xF8) { + nBytes = 5; + } else if (chr >= 0xF0) { + nBytes = 4; + } else if (chr >= 0xE0) { + nBytes = 3; + } else if (chr >= 0xC0) { + nBytes = 2; + } else { + return false; + } + nBytes--; + } + } else { + //多字节符的非首字节,应为 10xxxxxx + if ((chr & 0xC0) != 0x80) { + return false; + } + //减到为零为止 + nBytes--; + } + } + + //违返UTF8编码规则 + if (nBytes != 0) { + return false; + } + + if (bAllAscii) { //如果全部都是ASCII, 也是UTF8 + return true; + } + + return true; + } + + /** + * 字符集格式,参见: + * https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php + * 参考实现: + * https://www.cnblogs.com/Toney-01-22/p/9935297.html + * @param contentByte + * @return + */ + public static boolean isGBK(byte[] contentByte, int length) { + int nBytes = 0;//GBK可用1-2个字节编码,中文两个 ,英文一个 + boolean bAllAscii = true; //如果全部都是ASCII, + + for (int i=0; i= 0x80) + { + if (chr >= 0x81 && chr <= 0xFE) + { + nBytes = +2; + } + else + { + return false; + } + nBytes--; + } + } + else + { + if (chr < 0x40 || chr>0xFE) + { + return false; + } + nBytes--; + }//else end + } + + if (nBytes != 0) + { //违返规则 + return false; + } + + if (bAllAscii) + { //如果全部都是ASCII, 也是GBK + return true; + } + + return true; + } +} diff --git a/src/main/java/com/taover/util/ToolsFastJson.java b/src/main/java/com/taover/util/ToolsFastJson.java new file mode 100644 index 0000000..5f1afac --- /dev/null +++ b/src/main/java/com/taover/util/ToolsFastJson.java @@ -0,0 +1,162 @@ +package com.taover.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public class ToolsFastJson { + + public static JSONObject getPreviewObjArr(JSONObject originExcelData, int arrMaxSize) { + JSONObject previewObj = new JSONObject(); + if(originExcelData != null && !originExcelData.isEmpty()) { + for(String keyItem: originExcelData.keySet()) { + JSONArray dataItem = originExcelData.getJSONArray(keyItem); + int maxSize = dataItem.size() > arrMaxSize ? arrMaxSize : dataItem.size(); + JSONArray dataItemShunk = new JSONArray(); + for(int i=0; i>> translateObjArrArr(JSONObject previewOriginExcelDatasJson) { + Map>> originDataMap = new HashMap>>(); + if(previewOriginExcelDatasJson != null && !previewOriginExcelDatasJson.isEmpty()) { + for(String keyItem: previewOriginExcelDatasJson.keySet()) { + originDataMap.put(keyItem, translateArrArr(previewOriginExcelDatasJson.getJSONArray(keyItem))); + } + } + return originDataMap; + } + + public static List> translateArrArr(JSONArray jsonArray){ + if(jsonArray == null) { + return null; + } + List> resultList = new ArrayList>(); + for (int i = 0; i < jsonArray.size(); i++) { + ArrayList columList = new ArrayList(); + JSONArray columArray = jsonArray.getJSONArray(i); + for (int j = 0; j < columArray.size(); j++) { + columList.add(columArray.getString(j)); + } + resultList.add(columList); + } + return resultList; + } + + public static boolean isJsonNull(Object data){ + if(data == null){ + return true; + } + if(!(data instanceof String) && data.toString().equals("null")){ + return true; + } + return false; + } + + public static void removeJsonNull(JSONObject data){ + if(data == null){ + return; + } + Iterator keyIter = data.keySet().iterator(); + List removeKeys = new ArrayList(data.size()); + while(keyIter.hasNext()){ + String keyItem = keyIter.next(); + Object value = data.get(keyItem); + + if(isJsonNull(value)) { + removeKeys.add(keyItem); + continue; + } + + if(value instanceof JSONObject){ + removeJsonNull((JSONObject)value); + }else if(value instanceof JSONArray){ + removeJsonNull((JSONArray)value); + } + } + + for(String rKey: removeKeys) { + data.remove(rKey); + } + } + + public static void removeJsonNull(JSONArray dataArr){ + if(dataArr == null){ + return; + } + for(int i=0; i keyIter = data.keySet().iterator(); + while(keyIter.hasNext()){ + String keyItem = keyIter.next(); + Object value = data.get(keyItem); + + if(isJsonNull(value)) { + data.put(keyItem, target); + continue; + } + + if(value instanceof JSONObject){ + replaceJsonNull((JSONObject)value, target); + }else if(value instanceof JSONArray){ + replaceJsonNull((JSONArray)value, target); + } + } + } + + public static void replaceJsonNull(JSONArray dataArr, Object target){ + if(dataArr == null){ + return; + } + for(int i=0; i