您的位置:首页 > 其它

通过读取文件头部判断是否为CSV格式文件

2014-11-30 20:30 3631 查看

通过读取文件头部判断是否为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐