package com.se.simu.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<String> 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();
|
}
|
}
|
}
|