16进制⽂件头笔记及⽂件类型判断代码
之前做过⼀个功能,说是上传⽂件到服务器,但是所有⽂件excel、word、⾳乐、视频等都上传到⼀个⽂件夹,不利于查,于是⾃⼰上⽹查询关于这⽅⾯的资料,决定按⽂件后缀名,给⽂件进⾏分类,存放不同的⽂件夹。
ums;
/**
* @author
* @version创建时间:2019年4⽉9⽇上午9:47:58
*
* ⽂件类型枚举
* 注意:txt⽂档没有⽂件头
*
*/
public enum FileType {
/**
* JEPG.
*/
JPEG("FFD8FF"),
/**
* PNG.
*/
PNG("89504E47"),
/**
* GIF.
*/
GIF("47494638"),
/**
* TIFF.
*/
TIFF("49492A00"),
/**
* Windows Bitmap.
*/
BMP("424D"),
/
**
* CAD.
*/
DWG("41433130"),
/**
* Adobe Photoshop.
*/
PSD("38425053"),
/**
* Rich Text Format.
*/
RTF("7B5C727466"),
/**
* XML.
*/
XML("3C3F786D6C"),
/**
* HTML.
*/
HTML("68746D6C3E"),
/**
* CSS.
*/
CSS("48544D4C207B0D0A0942"),
/**
* JS.
*/
JS("696B2E71623D696B2E71"),
/**
* Email [thorough only].
*/
EML("44656C69766572792D646174653A"),
DBX("CFAD12FEC5FD746F"),
/
**
* Outlook (pst).
*/
PST("2142444E"),
/**
* MS Word/Excel.
*/
XLS_DOC("D0CF11E0"), XLSX_DOCX("504B030414000600080000002100"),  /**
* Visio
*/
VSD("d0cf11e0a1b11ae10000"),
/
**
* MS Access.
*/
MDB("5374616E64617264204A"),
/**
* WPS⽂字wps、表格et、演⽰dps都是⼀样的
*/
WPS("d0cf11e0a1b11ae10000"),
/**
* torrent
*/
TORRENT("6431303A637265617465"),
/**
* WordPerfect.
*/
WPD("FF575043"),
/**
* Postscript.
*/
EPS("252150532D41646F6265"),
/**
* Adobe Acrobat.
*/
PDF("255044462D312E"),
/**
* Quicken.
*/
QDF("AC9EBD8F"),
/**
* Windows Password.
*/
PWL("E3828596"),
/**
* ZIP Archive.
*/
ZIP("504B0304"),
/**
* RAR Archive.
*/
RAR("52617221"),
/**
* JSP Archive.
*/
JSP("3C2540207061676520"),
/
**
* JAVA Archive.
*/
JAVA("7061636B61676520"),
/**
* CLASS Archive.
*/
CLASS("CAFEBABE0000002E00"),
/**
* JAR Archive.
*/
JAR("504B03040A000000"),
/**
* MF Archive.
*/
EXE("4D5A9000030000000400"),
/**
*CHM Archive.
*/
CHM("49545346030000006000"),
/*
* INI("235468697320636F6E66"), SQL("494E5345525420494E54"), BAT(
* "406563686F206f66660D"), GZ("1F8B0800000000000000"), PROPERTIES(      * "6C6F67346A2E726F6F74"), MXP(
* "04000000010000001300"),
*/
/**
* Wave.
*/
WAV("57415645"),
/**
* AVI.
*/
AVI("41564920"),
/**
* Real Audio.
*/
RAM("2E7261FD"),
/**
* Real Media.
*/
RM("2E524D46"),
/**
* MPEG (mpg).
*/
MPG("000001BA"),
/**
* Quicktime.
*/
MOV("6D6F6F76"),
/**
* Windows Media.
*/
ASF("3026B2758E66CF11"),
/**
* MIDI.
*/
MID("4D546864"),
/**
* MP4.
*/
MP4("00000020667479706d70"),
/**
* MP3.
*/
MP3("49443303000000002176"),
/**
* FLV.
*/
FLV("464C5601050000000900")
;
private String value = "";
/**
* Constructor.
*
* @param type
*/
private FileType(String value) {
this.value = value;
}
public String getValue() {
public void setValue(String value) {
this.value = value;
}
}
复制代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
bigdatamon.CetcBigDataException;
ums.ErrorCode;
ums.FileType;
ums.UploadFileType;
/**
* @author
* @version创建时间:2019年4⽉9⽇上午9:49:58
*
*
*          ⽂件类型判断类型注意:txt⽂档没有⽂件头,⽆法通过该⽅法判断⽂件类型
*/
public final class FileTypeJudge {
private final static Logger logger = Logger(FileTypeJudge.class);
//定义⽂件分类,可以⾃定义其他⽂件分类
public final static  FileType[] pics = { FileType.JPEG, FileType.PNG, FileType.GIF, FileType.TIFF, FileType.BMP, FileType.DWG,
FileType.PSD };
public final static FileType[] docs = { FileType.RTF, FileType.XML, FileType.XLS_DOC, FileType.XLSX_DOCX, FileType.WPS, FileType.WPD,            FileType.PDF, FileType.ZIP, FileType.RAR, FileType.MF, FileType.CHM };
public final static FileType[] audios = { FileType.WAV, FileType.MP3 };
public final static FileType[] videos = { FileType.AVI, FileType.RAM, FileType.RM, FileType.MPG, FileType.MOV, FileType.ASF,
FileType.MP4, FileType.FLV, FileType.MID };
private FileTypeJudge() {
super();
}
/**
* 将⽂件头转换成16进制字符串
*
* @param原⽣byte
* @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 = HexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
String();
}
/**
* 得到⽂件头
*
* @param inputStream ⽂件流
* @return⽂件头
* @throws IOException
private static String getFileContent(InputStream is) throws IOException {
byte[] b = new byte[28];
try {
} catch (IOException e) {
<("---读取⽂件头失败:{}-----", e.getMessage());
throw e;
}
return bytesToHexString(b);
}
/**
* 判断⽂件类型
索尼xml文件可以删除吗
*
* @param inputStream ⽂件流
* @return⽂件类型
*/
public static FileType getType(InputStream inputStream) throws IOException {
if (inputStream == null) {
throw new CetcBigDataException(ErrorCode.Code(), ErrorCode.Msg());        }
String fileHead = getFileContent(inputStream);
if (fileHead == null || fileHead.length() == 0) {
return null;
}
fileHead = UpperCase();
FileType[] fileTypes = FileType.values();
for (FileType type : fileTypes) {
if (fileHead.Value())) {
return type;
}
}
return null;
}
/**
*
* @param value 表⽰⽂件类型
* @return UploadFileType
* @return
*/
public static UploadFileType getUploadFileType(FileType value) {
if (value == null) {
return null;
}
// 图⽚
for (FileType fileType : pics) {
if (fileType.equals(value)) {
return UploadFileType.IMG;
}
}
// ⽂档
for (FileType fileType : docs) {
if (fileType.equals(value)) {
return UploadFileType.DOC;
}
}
// ⾳乐
for (FileType fileType : audios) {
if (fileType.equals(value)) {
return UploadFileType.AUDIO;
}
}
// 视频
for (FileType fileType : videos) {
if (fileType.equals(value)) {
return UploadFileType.VIDEO;
}
}
return UploadFileType.OTHER;
}
/***
*
* @param file
* @return
* @throws FileNotFoundException
* @throws IOException
*/
public static UploadFileType getUploadFileType(File file) throws FileNotFoundException, IOException {
if (file == null || file.length() <= 0) {
throw new CetcBigDataException(ErrorCode.Code(), ErrorCode.Msg());

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。