我有一个上传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,但它未能给出Office中所有电子表格的正确MIME类型。
发布于 2013-03-20 08:12:50
如何区分真正的CSV文件和带有.csv文件扩展名的“假”CSV文件?
您不能以直接的方式这样做,因为每个文件都可以被解释为CSV文件(用换行符分隔的记录,用逗号分隔的字段,所以即使使用某些字符集的二进制文件也可以被读取为“有效”CSV文件)。例如,如果文件不包含任何换行符或逗号字符,您将得到包含整个文件的单个记录/字段结果。
为了检查它是否是一个有效的CVS文件(对于您的用例),您需要使用一些约束来验证已经从CSV文件读取的结果,这些约束是您知道您的特定数据需要完成的。例如,你可以
顺便说一句:您无论如何都应该执行这些验证,以避免恶意数据被导入到应用程序中。
发布于 2013-03-20 08:12:06
许多文件格式都有一个特殊的头,一个简短的字节序列,用作类型签名。这就是Linux如何区分文本文件和图像,而不需要特定的文件扩展名。
在Java中,您可以使用来自javax.activation的实用程序类。给出了一个完整的例子这里。
如果您的文本文件被标识为text/csv (或者文本/纯文本),那么您可以尝试将其解析为文本/csv。
https://stackoverflow.com/questions/15474080
复制相似问题