我有一个上传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类型。
答案 0 :(得分:4)
如何区分真正的CSV文件和带有.csv文件扩展名的“假”CSV文件?
您无法直接执行此操作,因为每个文件都可以解释为CSV文件(由换行符分隔的记录,以逗号分隔的字段,因此即使使用某些字符集的二进制文件也可以读作“有效的“CSV文件”。例如,如果文件不包含任何换行符或逗号字符,则最终会得到包含整个文件的单个记录/单个字段结果。
为了检查它是否是有效的CVS文件(对于您的用例),您需要使用您知道特定数据需要满足的一些约束来验证从CSV文件中读取的结果。例如,您可以
答案 1 :(得分:0)
许多文件格式都有一个特殊的标题,一个用作类型签名的短字节序列。这就是Linux如何从图像中分辨文本文件,而无需特定的文件扩展名。
在Java中,您可以使用javax.activation
中的实用程序类。给出了一个完整的例子here。
如果您的文本文件被标识为text / csv(或text / plain),那么您可以尝试解析它。