コードは以下の通りであります:
インポート; java.io.FileInputStream のインポートにjava.io.IOException; インポートたjava.util.HashMap; / ** * <P> *クラス説明:ヘッダー情報を取得し、決定を * | -ヘッダファイルは、期間の開始時に位置しています通常、セクションの冒頭で、データの特定のタスクを引き受けます。 * | -パフォーマンス関数を含む担体、データインタフェース宣言、プログラム(宣言)を格納するためのステートメント、および(実装)を実現するためのプログラムを格納する定義ファイルとしてヘッダファイル。 * | -ユーザがサーバ側でのファイルタイプを決定するためにファイルをアップロードする際に問題を解決するために、それは直接アップロードするファイルフォーマットに準拠しているかどうかを判断するために、ファイルの最初の数バイトを読み込み、ファイルのヘッダを取得する方法です。 * / パブリック クラスCheckFileFormatUtil { // キャッシュファイルのヘッダー情報-ファイルヘッダ情報 プライベート 静的 最終のHashMap <文字列、文字列> = mFileTypes 新しい新規のHashMap <文字列、文字列> (); 静的{ //画像 mFileTypes.put( "FFD8FF"、 "JPG" ); mFileTypes.put( "89504E47"、 "PNG" ); mFileTypes.put( "47494638"、 "GIF" ); mFileTypes.put( "49492A00"、 "TIF" )。 mFileTypes.put( "424D"、 "BMP" )。 // mFileTypes.put( "41433130"、 "DWG"); // CAD mFileTypes.put( "38425053"、 "PSD" )。 mFileTypes.put( "7B5C727466"、 "RTF"); // 日记本 mFileTypes.put(」 mFileTypes.put( "44656C69766572792D646174653A"、 "EML")。// 邮件 mFileTypes.put( "D0CF11E0"、 "DOC" ); mFileTypes.put( "D0CF11E0"、 "XLS"); // excel2003版本文件 mFileTypes.put( "5374616E64617264204A"、 "MDB" ); mFileTypes.put( "252150532D41646F6265"、 "PS" ); mFileTypes.put( "255044462D312E"、 "PDF" ); mFileTypes.put( "504B0304"、 "docxファイル" ); mFileTypes.put( "504B0304"は、 "XLSX"); mFileTypes.put("57415645"、 "WAV" ); mFileTypes.put( "41564920"、 "aviファイル" ); mFileTypes.put( "2E524D46"、 "RM" )。 mFileTypes.put( "000001BA"、 "MPG" )。 mFileTypes.put( "000001B3"、 "MPG" )。 mFileTypes.put( "6D6F6F76"、 "MOV" )。 mFileTypes.put( "3026B2758E66CF11"、 "ASF" )。 mFileTypes.put( "4D546864"、 "ミッド" ); mFileTypes.put( "1F8B08"、 "GZ" )。 * @author WLX * <P> *メソッド説明:ファイルパスに応じてヘッダ情報を取得する * / パブリック 静的文字列getFileType(文字列filePathに){ // するSystem.out.println(getFileHeader(filePathに)); // システム.out.println(mFileTypes.get(getFileHeader(filePathに))); 戻りmFileTypes.get(getFileHeader(filePathに)); } / ** * @param filePathにファイルパス * @return ヘッダ情報を * @author WLX * <P > *方法の説明:ファイルパスに応じてヘッダ情報を取得する * / パブリック 静的ストリングgetFileHeader(列filePathに){ FileInputStreamのは、IS = NULL ; 文字列値 = NULL ; 試みは{ IS = 新しい新規のFileInputStream(filePathに); バイト [] B = 新しい新しい バイト [4 ]; / * * INT読む()この入力ストリームからを読み込みデータバイトを取ります。読み取りINT(バイト[] b)はこの入力からのb.lengthするアップストリーム バイト配列に読み込まれたデータの*バイト。INT読み出す(バイト[] B、OFF INTを、INT LEN) *この入力からバイト配列に読み出したデータのバイトを最大lenストリーム。 * / Is.read(B、 0 =てb.lengthに、)。 値ヘッダ情報を;(B)bytesToHexString } キャッチ(例外E){ e.printStackTrace(); } 最後に{ IF(ヌル!= IS){ 試み{ is.close(); } キャッチ(IOExceptionをE){ e.printStackTrace()を。 } } } 戻り値; } / ** * @paramのバイト配列SRCファイルのヘッダ情報を読み取る * @return * @authorWLX * <P> *メソッド説明:バイト配列が読み取られる、文字列型へのファイルのファイルヘッダ情報を表す * / プライベート 静的文字列bytesToHexString(バイト[] SRC){ StringBuilderのビルダー = 新しい新;のStringBuilder() IF =(SRC = NULL || src.length <= 0 ){ 戻り NULL ; } 文字列HV; のために(バイトASRC:SRC){ //は16進数の文字列パラメータ整数(ベース16)が符号なし整数を表し返しますフォーム、大文字に変換 HV = Integer.toHexString(ASRC&0xFFの IF).toUpperCase(); (hv.length()<2 ){ builder.append( 0 )。 } builder.append(HV)。 } // するSystem.out.println(builder.toString())。 返すbuilder.toStringを(); } パブリック 静的 ボイドメイン(文字列[]引数)スロー例外{ 最終列たfileType = getFileType( "E:\\项目管理清单の.xlsxを" )。 System.out.println(たfileType)。 System.out.println(getFileHeader( "E:\\项目管理清单の.xlsx" )); } }
付録:マジックナンバープロフィール
ファイルの多くの種類は、その初期コンテンツの数バイトは、固定された(あるいは意図的に満たされた、またはこのようである)されます。
ファイルの種類のこれらのバイトの内容を決定することができるので、これらのバイトの内容は、マジックナンバー(マジックナンバー)と呼ばれます。
JPEGのJPG、JPEG 0xFFD8FF PNG PNG 0x89504E470D0A1A0A GIF GIF GIF8 のTIFF、TIF、TIFF 0x49492A00 のTIFF、TIF、TIFF 0x4D4D002A AOLのARTアート0x4A47040E000000 AOLのARTアート0x4A47030E000000 PCペイントブラシPCX 0x0A050108 0xD7CDC69A WMFグラフィックスメタファイル 0x01000900 WMFグラフィックスメタファイル グラフィックスメタファイル0x02000900 WMF 拡張メタファイルEMF 0x0100000058000000 CADのDWG 0x41433130 Outlook Expressのdbxの0xCFAD12FE MSオフィス/ OLE2ドキュメント、XLS、ドット、PPT、XLA、PPA、PPS;ポット; MSI、SDW; 0xD0CF11E0A1B11AE1デシベル のWordPerfect WPD 0xFF575043 QuickenのQDF 0xAC9EBD8F ロータスWordProのV9 LWP 0x576F726450726F QuickBooksのバックアップQBB 0x458600000600 セイジsly.or.srt.or.slt、SLY、SRT; SLT 0x53520100 ロータス123 V9 123 0x00001A00051004 ロータス123のV5 WK4 0x00001A0002100400 ロータス123 v3のWK3 0x00001A0000100400 ロータス123 V1 WK1 0x2000604060 WindowsパスワードのPWL 0xE3828596 ZIPアーカイブのzip、jarファイル0x504B0304 ZIPアーカイブ(時代遅れの)0x504B3030ジップ GZアーカイブGZを、0x1F8B08 TGZ 0x60EA ARJ ARJアーカイブ MPEGのMPG、MPEG 0x000001BA のMPEG、MPG、MPEG 0x000001B3 ウィンドウズメディア0x3026B2758E66CF11 ASF ELF実行可能エルフ;; 0x7F454C4601010100 Javaのクラスクラス0xCAFEBABE