区分.csv和false .csv

时间:2013-03-18 10:04:31

标签: java csv mime-types

我有一个上传CSV文件的方法。当我处理任何普通的CSV文件时,它工作正常。

问题出现时,它还会读取以.csv重命名为文件扩展名的任何文件(例如PDF),并且不会抛出任何异常。

有人可以帮助我区分真正的 CSV文件和带有.csv文件扩展名的“假”CSV文件吗?


更新以下评论:

这是我的代码:

CsvReader csvReader = new CsvReader();
ArrayList <ArrayList<String>> arrData=null;
String path="C:/Users/Avinash/Desktop/asset.csv";
arrData=CsvReader.readCsv(path,printinconsole);

如果asset.csv是真正的CSV文件,则上述代码可以正常工作。但是任何其他格式文件(比如asset.pdf)都被重命名为asset.csv,它不会抛出任何异常但会读取垃圾值。

有人可以帮助区分这两种不同的文件类型吗?

我尝试了jMimeMagic,但未能从Open Office中提供所有电子表格的正确MIME类型。

2 个答案:

答案 0 :(得分:4)

  

如何区分真正的CSV文件和带有.csv文件扩展名的“假”CSV文件?

您无法直接执行此操作,因为每个文件都可以解释为CSV文件(由换行符分隔的记录,以逗号分隔的字段,因此即使使用某些字符集的二进制文件也可以读作“有效的“CSV文件”。例如,如果文件不包含任何换行符或逗号字符,则最终会得到包含整个文件的单个记录/单个字段结果。

为了检查它是否是有效的CVS文件(对于您的用例),您需要使用您知道特定数据需要满足的一些约束来验证从CSV文件中读取的结果。例如,您可以

  • 验证标题/标题值
  • 验证每条记录中您期望的字段数
  • 验证最大/最小字段长度和记录长度
  • 验证字符集 - 您的数据是否包含无效字符?
  • 验证字段数据是否在特定范围内?
BTW:无论如何,您应该进行这些验证,以避免恶意数据被导入您的应用程序。

答案 1 :(得分:0)

许多文件格式都有一个特殊的标题,一个用作类型签名的短字节序列。这就是Linux如何从图像中分辨文本文件,而无需特定的文件扩展名。

在Java中,您可以使用javax.activation中的实用程序类。给出了一个完整的例子here

如果您的文本文件被标识为text / csv(或text / plain),那么您可以尝试解析它。