From dd7a6465aa9e42398bdc64c6f776deb01d556e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Sat, 8 Apr 2023 05:44:10 +0000 Subject: [PATCH] =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E5=8C=85=20=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=B7=A5=E5=85=B7=E7=B1=BB=20=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E5=8C=85=20=E7=BC=96=E7=A0=81=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高雄 --- .../main/java/cn/keking/utils/RarUtils.java | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 server/src/main/java/cn/keking/utils/RarUtils.java diff --git a/server/src/main/java/cn/keking/utils/RarUtils.java b/server/src/main/java/cn/keking/utils/RarUtils.java new file mode 100644 index 00000000..a08c1ce6 --- /dev/null +++ b/server/src/main/java/cn/keking/utils/RarUtils.java @@ -0,0 +1,130 @@ +package cn.keking.utils; +import cn.keking.config.ConfigConstants; +import cn.keking.service.ZtreeNodeVo; +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author : Gao + * create : 2023-04-08 + **/ +public class RarUtils { + private static final String fileDir = ConfigConstants.getFileDir(); + + public static byte[] getUTF8BytesFromGBKString(String gbkStr) { + int n = gbkStr.length(); + byte[] utfBytes = new byte[3 * n]; + int k = 0; + for (int i = 0; i < n; i++) { + int m = gbkStr.charAt(i); + if (m < 128 && m >= 0) { + utfBytes[k++] = (byte) m; + continue; + } + utfBytes[k++] = (byte) (0xe0 | (m >> 12)); + utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f)); + utfBytes[k++] = (byte) (0x80 | (m & 0x3f)); + } + if (k < utfBytes.length) { + byte[] tmp = new byte[k]; + System.arraycopy(utfBytes, 0, tmp, 0, k); + return tmp; + } + return utfBytes; + } + + public static String getUtf8String(String str) { + if (str != null && str.length() > 0) { + String needEncodeCode = "ISO-8859-1"; + String neeEncodeCode = "ISO-8859-2"; + String gbkEncodeCode = "GBK"; + try { + if (Charset.forName(needEncodeCode).newEncoder().canEncode(str)) { + str = new String(str.getBytes(needEncodeCode), StandardCharsets.UTF_8); + } + if (Charset.forName(neeEncodeCode).newEncoder().canEncode(str)) { + str = new String(str.getBytes(neeEncodeCode), StandardCharsets.UTF_8); + } + if (Charset.forName(gbkEncodeCode).newEncoder().canEncode(str)) { + str = new String(getUTF8BytesFromGBKString(str), StandardCharsets.UTF_8); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return str; + } + /** + * 判断是否是中日韩文字 + */ + private static boolean isChinese(char c) { + Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); + return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS + || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS + || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A + || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION + || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION + || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS; + } + public static boolean judge(char c){ + return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'); + } + public static boolean isMessyCode(String strName) { + //去除字符串中的空格 制表符 换行 回车 + Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*"); + Matcher m = p.matcher(strName); + String after = m.replaceAll("").replaceAll("\\+", "").replaceAll("#", "").replaceAll("&", ""); + //去除字符串中的标点符号 + String temp = after.replaceAll("\\p{P}", ""); + //处理之后转换成字符数组 + char[] ch = temp.trim().toCharArray(); + for (char c : ch) { + //判断是否是数字或者英文字符 + if (!judge(c)) { + //判断是否是中日韩文 + if (!isChinese(c)) { + //如果不是数字或者英文字符也不是中日韩文则表示是乱码返回true + return true; + } + } + } + //表示不是乱码 返回false + return false; + } + + /** + * 读取文件目录树 + */ + public static List getTree(String rootPath) { + List nodes = new ArrayList<>(); + File file = new File(fileDir+rootPath); + ZtreeNodeVo node = traverse(file); + nodes.add(node); + return nodes; + } + private static ZtreeNodeVo traverse(File file) { + ZtreeNodeVo pathNodeVo = new ZtreeNodeVo(); + pathNodeVo.setId(file.getAbsolutePath().replace(fileDir, "").replace("\\", "/")); + pathNodeVo.setName(file.getName()); + pathNodeVo.setPid(file.getParent().replace(fileDir, "").replace("\\", "/")); + if (file.isDirectory()) { + List subNodeVos = new ArrayList<>(); + File[] subFiles = file.listFiles(); + if (subFiles == null) { + return pathNodeVo; + } + for (File subFile : subFiles) { + ZtreeNodeVo subNodeVo = traverse(subFile); + subNodeVos.add(subNodeVo); + } + pathNodeVo.setChildren(subNodeVos); + } + return pathNodeVo; + } +}