Java 区分.csv和false.csv

Java 区分.csv和false.csv,java,csv,mime-types,Java,Csv,Mime Types,我有一个上传CSV文件的方法。当我使用任何普通的CSV文件时,它都可以正常工作 当它同时读取以.csv重命名的任何文件(比如PDF)作为文件扩展名时,就会出现问题,并且不会引发任何异常 有人能帮我区分一个真正的CSV文件和一个扩展名为.CSV的“假”CSV文件吗 更新以下评论: 这是我的代码: CsvReader csvReader = new CsvReader(); ArrayList <ArrayList<String>> arrData=null; String

我有一个上传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);

CsvReader CsvReader=new CsvReader();

ArrayList,但它无法为Open Office中的所有电子表格提供正确的MIME类型。

许多文件格式都有一个特殊的头,一个用作类型签名的短字节序列。这就是Linux如何区分文本文件和图像,而不需要特定的文件扩展名

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


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

许多文件格式都有一个特殊的头,一个用作类型签名的短字节序列。这就是Linux如何区分文本文件和图像,而不需要特定的文件扩展名

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

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

如何区分真正的CSV文件和扩展名为.CSV的“假”CSV文件

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

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

  • 验证标题/标题值
  • 验证每个记录中预期的字段数
  • 验证最大/最小字段长度和记录长度
  • 验证字符集-数据是否包含无效字符
  • 验证字段数据是否在特定范围内
顺便说一句:无论如何,您都应该进行这些验证,以避免将恶意数据导入到您的应用程序中

如何区分真正的CSV文件和扩展名为.CSV的“假”CSV文件

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

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

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

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

你能用语言描述一下如何区分这两个实体吗?如果是,则将其翻译为[在此插入所选语言]。如果您在实现过程中遇到任何具体问题(使用适当的语言标记问题),请尝试并寻求帮助。有关如何获得正确答案的更多信息,请参阅。CsvReader CsvReader=new CsvReader();ArrayList arrData=null;String path=“C:/Users/Avinash/Desktop/asset.csv”;arrData=CsvReader.readCsv(路径,printincole);上面的代码运行良好asset.csv是真实的csv文件。但任何其他格式的文件,如asset.pdf更改为asset.csv,它不会引发任何异常,而是读取垃圾值。有谁能帮助区分这两个不同的文件吗。我尝试了jmimemagic,但它并没有给出OpenOffice中所有电子表格的正确mime类型。非常感谢您的帮助。所以这是,所以我们可以相应地标记问题。这一次我为你做了这件事(第一件是免费的)!你能用语言描述一下如何区分这两个实体吗?如果是,则将其翻译为[在此插入所选语言]。如果您在实现过程中遇到任何具体问题(使用适当的语言标记问题),请尝试并寻求帮助。有关如何获得正确答案的更多信息,请参阅。CsvReader CsvReader=new CsvReader();ArrayList arrData=null;String path=“C:/Users/Avinash/Desktop/asset.csv”;arrData=CsvReader.readCsv(路径,printincole);上面的代码运行良好asset.csv是真实的csv文件。但任何其他格式的文件,如asset.pdf更改为asset.csv,它不会引发任何异常,而是读取垃圾值。有谁能帮助区分这两个不同的文件吗。我尝试了jmimemagic,但它并没有给出OpenOffice中所有电子表格的正确mime类型。非常感谢您的帮助。所以这是,所以我们可以相应地标记问题。这一次我为你做了这件事(第一件是免费的)!