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 ""; } }