Javaは、実際のファイルタイプを決定します

 コードは以下の通りであります:

インポート; 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

 

おすすめ

転載: www.cnblogs.com/xiaoliu66007/p/11359545.html