package com.se.system.utils;
|
|
import com.se.system.domain.StaticData;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
|
import java.io.*;
|
import java.net.URL;
|
import java.net.URLDecoder;
|
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;
|
|
@SuppressWarnings("ALL")
|
public class FileUtils {
|
private static final Logger log = LoggerFactory.getLogger(FileUtils.class);
|
|
public static String getFileName(String file) {
|
int idx = file.lastIndexOf(File.separator);
|
if (idx > -1) {
|
return file.substring(idx + 1);
|
}
|
|
return "";
|
}
|
|
public static String getExtension(File file) {
|
if (file == null) {
|
return null;
|
}
|
|
String fileName = file.getName().toLowerCase();
|
|
int idx = fileName.indexOf(StaticData.POINT);
|
if (idx == -1) {
|
return "";
|
}
|
|
return fileName.substring(idx);
|
}
|
|
public static String getExtension(String fileName) {
|
if (StringUtils.isEmpty(fileName)) {
|
return "";
|
}
|
|
int idx = fileName.lastIndexOf(StaticData.POINT);
|
if (idx == -1) {
|
return "";
|
}
|
|
return fileName.substring(idx).toLowerCase();
|
}
|
|
public static String getMime(String ext) {
|
switch (ext) {
|
case ".tif":
|
case ".tiff":
|
return "image/tiff";
|
case ".img":
|
return "application/x-img";
|
case ".gif":
|
return "image/gif";
|
case ".jpg":
|
case ".jpeg":
|
return "image/jpeg";
|
case ".png":
|
return "image/png";
|
case ".mp3":
|
return "audio/mp3";
|
case ".mp4":
|
return "video/mpeg4";
|
case ".avi":
|
return "video/avi";
|
case ".mpg":
|
case ".mpeg":
|
return "video/mpg";
|
case ".wav":
|
return "audio/wav";
|
case ".wma":
|
return "audio/x-ms-wma";
|
case ".swf":
|
return "application/x-shockwave-flash";
|
case ".wmv":
|
return "video/x-ms-wmv";
|
case ".rm":
|
return "application/vnd.rn-realmedia";
|
case ".rmvb":
|
return "application/vnd.rn-realmedia-vbr";
|
case ".js":
|
return "application/x-javascript";
|
case ".css":
|
return "text/css";
|
case ".asp":
|
return "text/asp";
|
case ".mht":
|
return "message/rfc822";
|
case ".jsp":
|
case ".htm":
|
case ".html":
|
case ".xhtml":
|
return "text/html";
|
case ".xml":
|
case ".svg":
|
return "text/xml";
|
case ".txt":
|
return "text/plain";
|
case ".dbf":
|
return "application/x-dbf";
|
case ".mdb":
|
return "application/msaccess";
|
case ".pdf":
|
return "application/pdf";
|
case ".ppt":
|
case ".pptx":
|
return "application/x-ppt";
|
case ".doc":
|
case ".docx":
|
return "application/msword";
|
case ".xls":
|
case ".xlsx":
|
return "application/vnd.ms-excel";
|
case ".dgn":
|
return "application/x-dgn";
|
case ".dwg":
|
return "application/x-dwg";
|
case ".ext":
|
return "application/x-msdownload";
|
default:
|
return "application/octet-stream";
|
}
|
}
|
|
public static String formatByte(long byteNumber) {
|
double kbNumber = byteNumber / StaticData.D1024;
|
if (kbNumber < StaticData.D1024) {
|
return new DecimalFormat("#.##KB").format(kbNumber);
|
}
|
double mbNumber = kbNumber / StaticData.D1024;
|
if (mbNumber < StaticData.D1024) {
|
return new DecimalFormat("#.##MB").format(mbNumber);
|
}
|
double gbNumber = mbNumber / StaticData.D1024;
|
if (gbNumber < StaticData.D1024) {
|
return new DecimalFormat("#.##GB").format(gbNumber);
|
}
|
double tbNumber = gbNumber / StaticData.D1024;
|
|
return new DecimalFormat("#.##TB").format(tbNumber);
|
}
|
|
public static String getSizes(double mbNumber) {
|
if (mbNumber < StaticData.D1024) {
|
return new DecimalFormat("#.##MB").format(mbNumber);
|
}
|
|
double gbNumber = mbNumber / StaticData.D1024;
|
if (gbNumber < StaticData.D1024) {
|
return new DecimalFormat("#.##GB").format(gbNumber);
|
}
|
|
double tbNumber = gbNumber / StaticData.D1024;
|
|
return new DecimalFormat("#.##TB").format(tbNumber);
|
}
|
|
public static double sizeToMb(long size) {
|
if (size < StaticData.D1050) {
|
return 0.001;
|
}
|
|
String str = String.format("%.3f", size / StaticData.D1024 / StaticData.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 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 (StringUtils.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 (StringUtils.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 < StaticData.I16; i++) {
|
byte byte0 = tmp[i];
|
str[k++] = StaticData.HEX_DIGITS[byte0 >>> 4 & 0xf];
|
str[k++] = StaticData.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();
|
}
|
}
|
|
public static String filter(String str) {
|
return str.replaceAll("/\\*[\\s\\S]*?\\*/", "");
|
}
|
|
public static String decode(String str) {
|
try {
|
return URLDecoder.decode(str, "UTF-8");
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
return null;
|
}
|
}
|
|
public static String getClassPathForJar() {
|
URL resource = ClassLoader.getSystemResource("");
|
if (null == resource) {
|
return null;
|
}
|
|
return decode(filter(resource.getPath()));
|
}
|
|
public static String getClassPathForWar() throws IOException {
|
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
|
|
return context.getResource("").getFile().getAbsolutePath();
|
}
|
}
|