1

我有一种上传 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 类型。

4

2 回答 2

4

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

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

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

  • 验证标题/标题值
  • 验证您期望在每条记录中的字段数
  • 验证最大/最小字段长度和记录长度
  • 验证字符集 - 您的数据是否包含无效字符?
  • 验证字段数据是否在特定范围内?

顺便说一句:无论如何,您都应该进行这些验证,以避免将恶意数据导入您的应用程序。

于 2013-03-20T08:12:50.693 回答
0

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

在 Java 中,您可以使用javax.activation. 这里给出了一个完整的例子。

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

于 2013-03-20T08:12:06.020 回答