ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 判断文件类型,文件格式,非后缀名的方式

2022-06-24 19:34:14  阅读:232  来源: 互联网

标签:FileTypeEnum Java String value 后缀名 文件格式 文件类型 return public


用非后缀名方式判断文件类型,文件格式,使用的业务场景不再详细描述了,直接上实现方法(使用者可以进行优化改造);

1、创建文件类型枚举:

 

package com.shsnc.dbtdemo.common.enums;

/**
* 文件类型枚举(部分为自定义类型)
*
* @author klp
* @date 2022-06-24
*/
public enum FileTypeEnum {

/**
* JEPG.
*/
JPEG("FFD8FF"),


/**
* PNG.
*/
PNG("89504E47"),


/**
* GIF.
*/
GIF("47494638"),


/**
* TIFF.
*/
TIFF("49492A00"),

/**
* RTF.
*/
RTF("7B5C727466"),
/**
* DOC
*/
DOC("D0CF11E0"),
/**
* XLS
*/
XLS("D0CF11E0"),
/**
* ACCESS
*/
MDB("5374616E64617264204A"),

/**
* WordPerfect
*/
WPD("FF575043"),


/**
* WordPerfect
*/
EPS("252150532D41646F6265"),

/**
* PS
*/
PS("252150532D41646F6265"),

/**
* Windows Bitmap.
*/
BMP("424D"),


/**
* CAD.
*/
DWG("41433130"),


/**
* Adobe Photoshop.
*/
PSD("38425053"),

/**
* Email [thorough only]
*/
EML("44656C69766572792D646174653A"),

/**
* XML.
*/
XML("3C3F786D6C"),

/**
* Outlook Express
*/
DBX("CFAD12FEC5FD746F"),

/**
* Outlook
*/
PST("2142444E"),

/**
* office类型,包括doc、xls和ppt
*/
OFFICE("D0CF11E0"),

/**
* HTML.
*/
HTML("68746D6C3E"),


/**
* Adobe Acrobat.
*/
PDF("255044462D312E"),


/**
* Quicken
*/
QDF("AC9EBD8F"),

/**
* Windows Password
*/
PWL("E3828596"),


/**
* ZIP Archive.
*/
ZIP("504B0304"),


/**
* RAR Archive.
*/
RAR("52617221"),


/**
* Wave.
*/
WAV("57415645"),


/**
* AVI.
*/
AVI("41564920"),

/**
* Real Audio
*/
RAM("2E7261FD"),
/**
* Real Media
*/
RM("2E524D46"),
/**
* MPG
*/
MPG("000001BA"),
/**
* Quicktime
*/
MOV("6D6F6F76"),
/**
* Windows Media
*/
ASF("3026B2758E66CF11"),
/**
* MIDI (mid)
*/
MID("4D546864"),
/**
* EXE
*/
EXE("4d5a");

private String value = "";

/**
* Constructor.
*
* @param value
*/
private FileTypeEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}


2、判断方法:

/**
* 检查文件类型
*
* @param inputStream
* @return
* @throws IOException
*/
public static boolean checkFileType(InputStream inputStream) throws IOException {
byte[] b = new byte[28];//这里需要注意的是,每个文件的magic word的长度都不相同,因此需要使用startwith
inputStream.read(b, 0, 28);
inputStream.close();
String fileHead = bytes2hex(b);
fileHead = fileHead.toUpperCase();
FileTypeEnum[] fileTypeEnums = FileTypeEnum.values();
for (FileTypeEnum type : fileTypeEnums) {
if (fileHead.startsWith(type.getValue())) {
return true;
}
}
return false;
}



/**
* 二进制转化为16进制
*/
private static String bytes2hex(byte[] bytes) {
StringBuilder hex = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
hex.append("0");
}
hex.append(temp.toLowerCase());
}
return hex.toString();
}




 

  

标签:FileTypeEnum,Java,String,value,后缀名,文件格式,文件类型,return,public
来源: https://www.cnblogs.com/haidaogege/p/16409989.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有