辨别文件的真实类型
2019獨角獸企業重金招聘Python工程師標準>>>
參考博客http://blog.csdn.net/shixing_11/article/details/5708145
每個文件類型都對應著一個編碼頭部
下面這些是已知的文件頭部[自定義的枚舉類型]
package org.masque.file; /*** * Description:文件對應的文件頭,資源來自網絡* FileHead.java Create on 2014年6月22日 下午1:14:03 * @author masque.java@outlook.com* @version 1.0* Copyright (c) 2014 Company,Inc. All Rights Reserved.*/ public enum FileHead {JPG("jpg", "FFD8FF"), //JPEG (jpg) PNG("png", "89504E47"), //PNG (png) GIF("gif", "47494638"), //GIF (gif) TIF("tif", "49492A00"), //TIFF (tif) BMP("bmp", "424D"), //Windows Bitmap (bmp) DWG("dwg", "41433130"), //CAD (dwg) HTML("html", "68746D6C3E"), //HTML (html) RTF("rtf", "7B5C727466"), //Rich Text Format (rtf) XML("xml", "3C3F786D6C"), ZIP("zip", "504B0304"), RAR("rar", "52617221"), PSD("psd", "38425053"), //Photoshop (psd) EML("eml", "44656C69766572792D646174653A"), //Email [thorough only] (eml) DBX("dbx", "CFAD12FEC5FD746F"), //Outlook Express (dbx) PST("pst", "2142444E"), //Outlook (pst) DOC_XLS("doc_xls", "D0CF11E0"), //MS Excel 注意:word 和 excel的文件頭一樣 MDB("mdb", "5374616E64617264204A"), //MS Access (mdb) WPD("wpd", "FF575043"), //WordPerfect (wpd) EPS("eps", "252150532D41646F6265"), PS("ps", "252150532D41646F6265"), PDF("pdf", "255044462D312E"), //Adobe Acrobat (pdf) QDF("qdf", "AC9EBD8F"), //Quicken (qdf) PWL("pwl", "E3828596"), //Windows Password (pwl) WAV("wav", "57415645"), //Wave (wav) AVI("avi", "41564920"), RAM("ram", "2E7261FD"), //Real Audio (ram) RM("rm", "2E524D46"), //Real Media (rm) MPG("mpg", "000001BA"), // MOV("mov", "6D6F6F76"), //Quicktime (mov) ASF("asf", "3026B2758E66CF11"), //Windows Media (asf) MID("mid", "4D546864"); //MIDI (mid) private String type;private String code;FileHead(String type,String code){this.type = type;this.code = code;}public String getType() {return type;}public String getCode() {return code;}public static FileHead getLikeCode(String code){System.out.println(code);if (code==null||"".equals(code)) return null;code = code.toUpperCase();FileHead [] fhs = FileHead.values();for (FileHead fh:fhs) {//模糊匹配文件頭if (code.startsWith(fh.code)) {return fh;}}return null;}public static FileHead getByType(String type){FileHead [] fhs = FileHead.values();for (FileHead fh:fhs) {if (fh.getType().equals(type)) {return fh;}}return null;}public static FileHead getByCode(String code){FileHead [] fhs = FileHead.values();for (FileHead fh:fhs) {if (fh.getCode().equals(code)) {return fh;}}return null;} }?使用方法如下
package org.masque.file;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /*** * Description: 讀取文件的前部分字節在已知的庫中比對* CheckFileHead.java Create on 2014年6月22日 下午1:48:09 * @author masque.java@outlook.com* @version 1.0* Copyright (c) 2014 Company,Inc. All Rights Reserved.*/ public class CheckFileHead {public static void main(String[] args) {String fileHeadStr = getFileByFile(new File("C:/40882199905262314.jpg"));FileHead fileHead = FileHead.getLikeCode(fileHeadStr);System.out.println(fileHead!=null?fileHead.getType():"未知的文件類型!");}public final static String getFileByFile(File file) { String filetype = null; byte[] b = new byte[30]; try { InputStream is = new FileInputStream(file); is.read(b); filetype = getFileHexString(b);is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return filetype; } public final static String getFileHexString(byte[] b) { StringBuilder stringBuilder = new StringBuilder(); if (b == null || b.length <= 0) { return null; } for (int i = 0; i < b.length; i++) { int v = b[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } }?代碼比較簡單就不做詳細介紹
轉載于:https://my.oschina.net/bughope/blog/403749
總結
- 上一篇: LX04 小米触屏音箱刷机教程
- 下一篇: 【转】:andriod 开发环境工具下载