一、前言
文本文件具有特殊性,文本头无明显标志,所以CSV与txt是无法通过文本头区分的,但是我们又不能单纯的只通过文件的后缀名去校验,我这里是选用了文本文件的业务内容做了校验
二、准备文件
交易模板.csv 文件业务内容与 交易模板2.txt 一样,
pdf文件.csv 是非文本文件串改后缀名的文件,
交易模板虽然也是csv文件,但与 交易模板.csv 业务内容不一致。
我们按照交易模板.csv 文件作为正确的所需业务内容文件,做校验。
三、代码演示
public class CsvFileVerifyUtil {
static{
System.out.println("============校验文件业务内容:bdc9b7d1bcc7==========");
}
/**
* 判断文件的前6个字节是否为所需正确的
*
* @param fis
* @return true-0校验成功,false-校验失败
*/
public static boolean csvContentVerify(FileInputStream fis) {
boolean b = false;
try {
//从流中读取前6个字节,转为16进制作比较
byte[] content = new byte[6];
fis.read(content, 0, content.length);
//包含指定内容,返回true,bdc9b7d1bcc7-->缴费记录表
b = bytesToHexString(content).contains("bdc9b7d1bcc7");
System.out.println("从流中读取前6个字节:"+bytesToHexString(content));
return b;
} catch (IOException e) {
e.printStackTrace();
}
return b;
}
/**
* 将字节数组转化为16劲真自负床
*
* @param buffer
* @return
*/
public static String bytesToHexString(byte[] buffer) {
StringBuilder hexFileTypeStr = new StringBuilder();
for (byte b : buffer) {
String hexString = Integer.toHexString(b & 0xFF);
if (hexString.length() < 2) {
hexFileTypeStr.append("0");
}
hexFileTypeStr.append(hexString);
}
return hexFileTypeStr.toString();
}
public static void main(String[] args) {
try {
String file = "D:\\zyl_new\\job\\交易模板.csv";
FileInputStream fileInputStream = new FileInputStream(file);
boolean b = csvContentVerify(fileInputStream);
System.out.println("交易模板.csv--->"+b);
file = "D:\\zyl_new\\job\\交易模板2.txt";
fileInputStream = new FileInputStream(file);
b = csvContentVerify(fileInputStream);
System.out.println("交易模板2.txt-->"+b);
file = "D:\\zyl_new\\job\\用户信息.csv";
fileInputStream = new FileInputStream(file);
b = csvContentVerify(fileInputStream);
System.out.println("用户信息.csv-->"+b);
file = "D:\\zyl_new\\job\\pdf文件.csv";
fileInputStream = new FileInputStream(file);
b = csvContentVerify(fileInputStream);
System.out.println("pdf文件改名.csv-->"+b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
四、测试结果
?
|