【问题标题】:Differentiate between .csv and false .csv区分 .csv 和假 .csv
【发布时间】:2013-03-18 10:04:31
【问题描述】:

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

【问题讨论】:

  • 您能描述一下您如何用单词来区分这两个实体吗?如果是这样,则将其翻译成[在此处插入选择的语言]。如果您在实施中遇到任何特定问题(用适当的语言标记问题),请尝试并寻求帮助。请参阅whathaveyoutried.com 了解有关如何获得好的答案的更多信息。
  • CsvReader csvReader = new CsvReader(); ArrayList > arrData=null;字符串路径="C:/Users/Avinash/Desktop/asset.csv"; arrData=CsvReader.readCsv(路径,打印控制台);上面的代码工作正常 assets.csv 是真正的 csv 文件。但是任何其他格式文件都说asset.pdf更改为asset.csv,它不会引发任何异常,而是读取垃圾值。任何人都可以帮助区分这两个不同的文件。我尝试了 jmimemagic,但它无法从开放式办公室中提供所有电子表格的正确 mime 类型。非常感谢任何帮助。
  • 好的。所以这是java,所以我们可以相应地标记问题。 If other users ask you for more information in the comments, edit your question using the edit link just below your original question.。这次我为你做了这个(第一个是免费的)!

标签: java csv mime-types


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多