文件类型判断笔记。


/**
 * 
 */
package boa.word.poi;

import java.io.File;
import java.io.FileInputStream;

/**
 * @author zhangdapeng 2015年1月3日下午4:55:25
 */
public class FileTypeJudge {

	public enum FileType {
		JPG("FFD8FFE000104A464946"), PNG("89504E470D0A1A0A0000"), GIF("47494638396126026F01"), TIF(
				"49492A00227105008037"), BMP16("424D228C010000000000"), // 16色位图(bmp)
		BMP24("424D8240090000000000"), // 24位位图(bmp)
		BMP256("424D8E1B030000000000"), // 256色位图(bmp)
		DWG("41433130313500000000"), HTML("3C21444F435459504520"), HTM("3C21646F637479706520"), CSS(
				"48544D4C207B0D0A0942"), JS("696B2E71623D696B2E71"), RTF("7B5C727466315C616E73"), PSD(
				"38425053000100000000"), EML("46726F6D3A203D3F6762"), DOC("D0CF11E0A1B11AE10000"), // MS
																									// Excel、Word、Msi
		VSD("D0CF11E0A1B11AE10000"), MDB("5374616E64617264204A"), PDF("255044462D312E350D0A"), RMVB(
				"2E524D46000000120001"), // rmvb、rm
		FLV("464C5601050000000900"), // flv、f4v
		MP4("00000020667479706D70"), MP3("49443303000000002176"), MPG("000001BA210001000180"), WMV(
				"3026B2758E66CF11A6D9"), // wmv、asf
		WAV("52494646E27807005741"), AVI("52494646D07D60074156"), MID("4D546864000000060001"), ZIP(
				"504B0304140000000800"), RAR("526172211A0700CF9073"), INI("235468697320636F6E66"), JAR(
				"504B03040A0000000000"), EXE("4D5A9000030000000400"), JSP("3C25402070616765206C"), MF(
				"4D616E69666573742D56"), XML("3C3F786D6C2076657273"), SQL("494E5345525420494E54"), JAVA(
				"7061636B616765207765"), BAT("406563686F206F66660D"), GZ("1F8B0800000000000000"), PROPERTIES(
				"6C6F67346A2E726F6F74"), CLASS("CAFEBABE0000002E0041"), CHM("49545346030000006000"), MXP(
				"04000000010000001300"), DOCX("504B0304140006000800"), WPS("D0CF11E0A1B11AE10000"), // WPS(wps、et、dps)
		TORRENT("6431303A637265617465"), MOV("6D6F6F76"), WPD("FF575043"), DBX("CFAD12FEC5FD746F"), PST("2142444E"), QDF(
				"AC9EBD8F"), PWL("E3828596"), RAM("2E7261FD");

		private String value = "";

		private FileType(String value) {
			this.value = value;
		}

		public String getValue() {
			return value;
		}

	}

	private FileTypeJudge() {
	}

	/**
	 * 得到上传文件的16进制文件头
	 * 
	 * @param src
	 * @return
	 */
	private static String bytesToHex(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 path
	 * @return
	 * @throws Exception
	 */
	
	public static FileType getFileType(String path) throws Exception {
		File file=new File(path);
		FileInputStream fis = new FileInputStream(file);
		byte[] b = new byte[10];
		fis.read(b, 0, b.length);
		fis.close();
		String fileCode = bytesToHex(b);

		FileType[] fileTypes = FileType.values();

		for (FileType type : fileTypes) {
			if (fileCode.toUpperCase().startsWith(type.getValue().trim())) {
				return type;
			}
		}

		return null;
	}

	public static void main(String[] args) throws Exception {
		System.out.println(FileTypeJudge.getFileType("C:\\Users\\Boa\\Desktop\\test\\test.docx"));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值