可以从文件头里面读取出文件类型
上一下伪代码
// 读取20前面20个字节,不同文件文件头可能长度不一样
byte[] bytes = new byte[20];
BufferedInputStream.read(bytes,0,bytes.length);
Stringbuilder build = new Stringbuilder();
for(byte b:bytes){
//这个是保证转成int之后,低8位比特位依然正确
int val = b&0xff;
String hexString = Inter.toHexString(val);
if(hexString.length < 2){
build .append(0);
}
build .append(hexString );
}
String fileTypeCode = build.toString().toUpperCase(Locale.ENGLISH);
原理
从文件读取的InputStream,前面几个字节是文件头,这个可能根据文件类型不一样,文件头有文件信息;这里面字节都是16进制的;我们可以获取这个16进制的字符串形式来进行判断;JDK的Inter有提供获取16进制字符串的方法;但是我们需要将字节转化成int;然后b&0xff;byte是8位比特位,b&0xff是为了保持8个比特位不变,然后根据这个int类型通过Inter.toHexString获取16进制的字符串;
比如xml的16进制字符串是“3C3F78D6C”,只要解析出来的String是否startWith(“3C3F78D6C”)由此可以判断是否是xml类型文件;