ファイルヘッダを読み込んでCSV形式のファイルかどうかを判断する

3365 ワード

ファイルヘッダを読み込んでCSV形式のファイルかどうかを判断する
CSVファイルヘッダを読み取ることにより、ファイルがCSVファイルタイプに属するか否かを判断するが、一般的にはファイル接尾辞のみでそのファイルが属するタイプを判断するのは不合理であり、ファイル接尾辞を変更するだけではこのファイルが正しいファイルフォーマットであるか否かを認識することができず、実行可能なファイル接尾辞を変更する.CSVはファイル接尾辞を判断することによってファイルタイプを識別する場合、exeのファイルフォーマットはCSVのフォーマットではないに違いないので、このファイルヘッダを事前に判断すれば、このファイルが私たちが必要とするファイルタイプかどうかを特定し、誤ったファイルの解析を避けることができます.同様に、サーバのセキュリティをある程度保護することもできます.
/*
 * System Abbrev :
 * system Name  :
 * Component No  :
 * Component Name:
 * File name     :Util.java
 * Author        :Qiuzhenping
 * Date          :2014-11-30
 * Description   :  <description>
 */

/* Updation record 1:
 * Updation date        :  2014-11-30
 * Updator          :  Qiuzhenping
 * Trace No:  <Trace No>
 * Updation No:  <Updation No>
 * Updation Content:  <List all contents of updation and all methods updated.>
 */
package com.qiuzhping.util;

import java.io.FileInputStream;

/**
 * <Description functions in a word> 
 *     CSV   ,         CSV    ,                         ,
 *        ,                               ,           .CSV
 *                   ,         ,  exe         CSV   ,      
 *                               ,            。           
 *         。
 * <Detail description>
 * 
 * @author Qiuzhenping
 * @version [Version NO, 2014-11-30]
 * @see [Related classes/methods]
 * @since [product/module version]
 */
public class Util {

	/** <Description functions in a word>
	 * Bytes to Hex String
	 *         16     
	 * <Detail description>
	 * @author  Qiuzhenping
	 * @param src
	 * @return [Parameters description]
	 * @return String [Return type description]
	 * @exception throws [Exception] [Exception description]
	 * @see [Related classes#Related methods#Related properties]
	 */
	public static String bytes2HexString(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);
		}
		System.out.println(" bytes2HexString = "+stringBuilder.toString().toUpperCase());
		return stringBuilder.toString().toUpperCase();
	}

	/** <Description functions in a word>
	 * Judge this FileInputStream is csv file
	 *                   ,                 
	 * <Detail description>
	 * @author  Qiuzhenping
	 * @param is
	 * @return [Parameters description]
	 * @return boolean [Return type description]
	 * @exception throws [Exception] [Exception description]
	 * @see [Related classes#Related methods#Related properties]
	 */
	public static boolean judgeIsCSV(FileInputStream is){
		try {
			byte[] b = new byte[4];
			is.read(b, 0, b.length);
			return bytes2HexString(b).contains("5B75726C");//CSV       4   
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	public static void main(String[] args) throws Exception {
		String src = "C:/dataTemp/Url  .csv";
		FileInputStream is = new FileInputStream(src);
		System.out.println(judgeIsCSV(is));
		src = "C:/dataTemp/Url  .csv";
		is = new FileInputStream(src);
		System.out.println(judgeIsCSV(is));
	}
}
転載は明記してください.http://blog.csdn.net/qiuzhping/article/details/41626295