package com.nuvole.util;
|
|
import com.nuvole.util.enums.FileType;
|
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
// @formatter:off
|
/**
|
* .-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
* __.' @Author ~. .~ 代码无Bug `.__
|
* .'// liu.q \./ (秘籍) \\`.
|
* .'// [916000612@qq.com] | 欲练神功 引刀自宫 \\`.
|
* .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
|
* .'//.-" 2019-04-24 `-. | .-' 15:56 "-.\\`.
|
* .'//______.============-.. \ | / ..-============.______\\`.
|
*.'______________________________\|/______________________________`.
|
*
|
* @Description :
|
*/
|
// @formatter:on
|
|
public class FileTypeJudge {
|
|
private FileTypeJudge() {
|
}
|
|
/**
|
* 将文件头转换成16进制字符串
|
*
|
* @return 16进制字符串
|
*/
|
private static String bytesToHexString(byte[] src) {
|
|
StringBuilder stringBuilder = new StringBuilder();
|
if (src == null || src.length <= 0) {
|
return null;
|
}
|
for (int i = 0; i < src.length; i++) {
|
int v = src[i] & 0xFF;
|
String hv = Integer.toHexString(v);
|
if (hv.length() < 2) {
|
stringBuilder.append(0);
|
}
|
stringBuilder.append(hv);
|
}
|
return stringBuilder.toString();
|
}
|
|
/**
|
* 得到文件头
|
*
|
* @param filePath 文件路径
|
* @return 文件头
|
* @throws IOException
|
*/
|
private static String getFileContent(String filePath) throws IOException {
|
|
byte[] b = new byte[28];
|
|
InputStream inputStream = null;
|
|
try {
|
inputStream = new FileInputStream(filePath);
|
inputStream.read(b, 0, 28);
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw e;
|
} finally {
|
if (inputStream != null) {
|
try {
|
inputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
}
|
return bytesToHexString(b);
|
}
|
|
private static String getFileContent(InputStream inputStream){
|
InputStream is = inputStream;
|
byte[] b = new byte[28];
|
try {
|
is.read(b, 0, 28);
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return bytesToHexString(b);
|
}
|
|
/**
|
* 判断文件类型
|
*
|
* @return 文件类型
|
*/
|
public static String getType(InputStream inputStream){
|
|
String fileHead = getFileContent(inputStream);
|
|
if (fileHead == null || fileHead.length() == 0) {
|
return null;
|
}
|
|
fileHead = fileHead.toUpperCase();
|
|
FileType[] fileTypes = FileType.values();
|
|
for (FileType type : fileTypes) {
|
if (fileHead.startsWith(type.getValue())) {
|
return type.toString();
|
}
|
}
|
return "";
|
}
|
}
|