package com.se.nsl.helper; import com.twmacinta.util.MD5; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.text.DecimalFormat; import java.util.List; @Slf4j @SuppressWarnings("ALL") public class FileHelper { public final static String POINT = "."; public final static int I16 = 16; public static final double D1024 = 1024.0; public static final double D1050 = 1050.0; public final static int I1000000 = 1000000; public static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; public static String getFileName(String file) { int idx = file.lastIndexOf(File.separator); if (idx > -1) { return file.substring(idx + 1); } return ""; } public static String getName(String file) { String fileName = getFileName(file); int idx = fileName.lastIndexOf("."); if (idx > -1) { return fileName.substring(0, idx); } return fileName; } public static String getExtension(File file) { if (file == null) { return null; } String fileName = file.getName().toLowerCase(); int idx = fileName.indexOf(POINT); if (idx == -1) { return ""; } return fileName.substring(idx); } public static String getExtension(String fileName) { if (StringHelper.isEmpty(fileName)) { return ""; } int idx = fileName.lastIndexOf(POINT); if (idx == -1) { return ""; } return fileName.substring(idx).toLowerCase(); } public static String formatByte(long byteNumber) { double kbNumber = byteNumber / D1024; if (kbNumber < D1024) { return new DecimalFormat("#.##KB").format(kbNumber); } double mbNumber = kbNumber / D1024; if (mbNumber < D1024) { return new DecimalFormat("#.##MB").format(mbNumber); } double gbNumber = mbNumber / D1024; if (gbNumber < D1024) { return new DecimalFormat("#.##GB").format(gbNumber); } double tbNumber = gbNumber / D1024; return new DecimalFormat("#.##TB").format(tbNumber); } public static String getSquareMeter(double num) { if (num < I1000000) { return new DecimalFormat("#.##平方米").format(num); } double knum = num / I1000000; return new DecimalFormat("#.##平方千米").format(knum); } public static double sizeToMb(long size) { if (size < D1050) { return 0.001; } String str = String.format("%.3f", size / D1024 / D1024); return Double.parseDouble(str); } public static String getMd5ByJdk(String filePath) throws IOException { FileInputStream fileStream = new FileInputStream(filePath); String md5 = DigestUtils.md5Hex(fileStream); fileStream.close(); return md5; } public static String getFastMd5(String filePath) throws IOException { String hash = MD5.asHex(MD5.getHash(new File(filePath))); MD5 md5 = new MD5(); md5.Update(hash, null); return md5.asHex(); } public static void deleteDir(String dir) { File file = new File(dir); deleteFiles(file); } public static void deleteFiles(File file) { if (null == file || !file.exists()) { return; } if (file.isDirectory()) { File[] files = file.listFiles(); if (null != files && files.length > 0) { for (File f : files) { if (f.isDirectory()) { deleteFiles(f); } else { f.delete(); } } } } file.delete(); } public static String getRelativePath(String file) { if (StringHelper.isEmpty(file)) { return null; } int idx = file.lastIndexOf(File.separator); int start = file.lastIndexOf(File.separator, idx - 1); return file.substring(start + 1); } public static String getPath(String file) { if (StringHelper.isEmpty(file)) { return null; } int end = file.lastIndexOf(File.separator); return file.substring(0, end); } @SuppressWarnings("unused") public static String getFileMd5(String filePath) { FileInputStream fis = null; try { MessageDigest md = MessageDigest.getInstance("MD5"); fis = new FileInputStream(new File(filePath)); FileChannel fChannel = fis.getChannel(); ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024); while (fChannel.read(buffer) != -1) { buffer.flip(); md.update(buffer); buffer.compact(); } byte[] b = md.digest(); return byteToHexString(b); } catch (Exception ex) { ex.printStackTrace(); return null; } finally { try { if (null != fis) { fis.close(); } } catch (IOException ex) { ex.printStackTrace(); } } } public static String byteToHexString(byte[] tmp) { char[] str = new char[16 * 2]; int k = 0; for (int i = 0; i < I16; i++) { byte byte0 = tmp[i]; str[k++] = HEX_DIGITS[byte0 >>> 4 & 0xf]; str[k++] = HEX_DIGITS[byte0 & 0xf]; } return new String(str); } public static String getStringMd5(String text) { StringBuilder builder = new StringBuilder(); try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(text.getBytes(StandardCharsets.UTF_8)); for (byte aByte : bytes) { builder.append(Integer.toHexString((0x000000FF & aByte) | 0xFFFFFF00).substring(6)); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } return builder.toString(); } public static void getFilesByPath(List list, String path) { File file = new File(path); if (file.isDirectory()) { File[] files = file.listFiles(); if (null == files) { return; } for (File f : files) { if (f.isDirectory()) { getFilesByPath(list, f.getPath()); } else { list.add(f.getPath()); } } } else { list.add(file.getPath()); } } public static void copyFile(File src, File dest) throws IOException { InputStream is = null; OutputStream os = null; try { is = new FileInputStream(src); os = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } finally { os.close(); is.close(); } } }