使用 Java 验证 CSV 文件

2024-01-25

我正在逐行读取文件,如下所示:

 FileReader myFile = new FileReader(File file);
 BufferedReader InputFile = new BufferedReader(myFile);
 // Read the first line
 String currentRecord = InputFile.readLine();

 while(currentRecord != null) {
      currentRecord = InputFile.readLine();
 }

但如果上传其他类型的文件,它仍然会读取其内容。例如,如果上传的文件是图片,则读取文件时会输出垃圾字符。所以我的问题是:在阅读文件之前如何检查文件是否为 CSV?

检查文件的扩展名有点蹩脚,因为有人可以上传不是 CSV 但扩展名为 .csv 的文件。提前致谢。


确定文件的 MIME 类型并不容易,特别是当 ASCII 部分可以与二进制部分混合时。

实际上,当您查看 java 邮件系统如何确定电子邮件的 MIME 类型时,它确实涉及读取其中的所有字节,并应用一些“规则”。
查看MimeUtility.java http://www.koders.com/java/fid774CF829BA2AAE26A665A81A801000FB0AB8F9B4.aspx?s=isBinary+isascii#L73

  • 如果此数据源的主要类型是“文本”并且其输入流中的所有字节都是 US-ASCII,则编码为“7 位”。
  • 如果超过一半的字节是非 US-ASCII,则编码为“base64”。
  • 如果少于一半的字节是非 US-ASCII,则编码是“quoted-printable”。
  • 如果该数据源的主要类型不是“text”,那么如果其输入流的所有字节都是US-ASCII,则编码为“7bit”。
  • 即使有一个非 US-ASCII 字符,编码也是“base64”。@return“7bit”、“引用打印”或“base64”

正如所提到的mmyers https://stackoverflow.com/users/13531/mmyers在一条被删除的评论中,JavaMime类型 http://jmimemagic.sourceforge.net/index.html应该做同样的事情,但是:

  • 自2006年以来它就死了
  • 它确实涉及阅读所有内容!

:

File file = new File("/home/bibi/monfichieratester");
InputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
int readByte;
while ((readByte = inputStream.read()) != -1) {
    byteArrayStream.write(readByte);
}
String mimetype = "";
byte[] bytes = byteArrayStream.toByteArray();

MagicMatch m = Magic.getMagicMatch(bytes);
mimetype = m.getMimeType();

所以...既然您正在阅读文件的所有内容,您可以利用它来根据该内容和您自己的规则来确定类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 验证 CSV 文件 的相关文章

  • Java如何删除设置了IMMUTABLE位的文件

    正在开发一个 Java 8 项目 我从外部源复制文件 在这些源之一中 文件设置了不可变位标志 In OSX这是这样设置的 sudo chflags schg path to file In Linux chattr i path to fi
  • 我该如何解决? KnapSack - 值完全相同,但每个对象都有三个权重

    我在解决我的练习时遇到问题 我读到了动态规划和算法 我认为我的练习是 特定背包问题 我用暴力法解决了它 但我无法用动态规划解决它 我有一艘重300吨的船 背包 有些晶体本身含有 3 种物质 X Y Z 每种物质都有重量 并且所有晶体都具有相
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • Maven 2 未运行 Junit 4 测试

    我在确保运行 Junit4 测试时遇到问题 同样的问题也被报告在https stackoverflow com questions 2021771 sort newest sort top https stackoverflow com q
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • 在r中拆分数据并将所有拆分文件保存在csv中

    我有一个名为 data 的数据集 Model Garage City Honda C Chicago Maruti B Boston Porsche A New York Honda B Chicago Honda C New York 它
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • Tomcat - 多个 webapps 文件夹

    是否可以有多个文件夹来放置要部署的应用程序 这些是如何定义的 是否可以将一个文件夹限制为仅是 domain com 的应用程序 而不是其他域 Thanks 看一眼conf server xml
  • 如何知道 glassfish 是什么 - 完整平台或网络配置文件?

    我已经安装了glassfish 我可以跑 asadmin version 它显示了它是什么版本 但如何知道它是 完整平台 还是 Web 配置文件 你可以使用 glassfish4 bin gt asadmin list containers
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • 导入 CSV 以更新表中的行

    大约有 26K 个产品 帖子 每个产品都有如下元值 post id 列是数据库中的产品 ID sku meta key 是每个产品的唯一 ID 我收到了一个新的 CSV 文件 该文件更新了每个产品的 sale price meta key
  • 将 XML 从网站解析到 Android 设备

    我正在启动一个 Android 应用程序 它将解析来自网络的 XML 我创建了一些 Android 应用程序 但它们从未涉及解析 XML 我想知道是否有人对最佳方法有任何建议 这是一个例子 try URL url new URL your
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • 将字符串转换为字符并按降序排序(ascii)

    我正在创建一个程序 该程序将使用户输入整数 一个接一个 存储在数组中并按降序显示整数 该程序还要求用户输入一个字符串 使用以下命令将其转换为字符string toCharArray 我已经正确地按降序显示整数 问题是我不知道如何按降序显示字
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • 在没有 ODBC 的情况下从 Java 操作 Access 数据库

    我想从我的 Java 项目操作 Microsoft Access 数据库 accdb 或 mdb 文件 我不想使用 Microsoft 的 JDBC ODBC Bridge 和 Access ODBC 驱动程序 因为 JDBC ODBC 桥

随机推荐

  • C# 在属性被命中之前运行一段代码

    我有一个方法 我希望始终在属性的 get 访问器之前运行 如果不手动运行 get 中的方法 这可能吗 这是我想要工作的一个例子 private string someString private string someOtherString
  • 无法在非聚合查询中的未定义结果变量上添加条件

    我正在实体存储库中执行此查询并不断获取 无法在未定义的结果变量上添加条件 但查询根本没有聚合 为什么这种事会发生在我身上 public function getPersonalizableItemsByOwner User owner qb
  • Xcode/iOS——摆脱特定常量的弃用警告?

    我的项目中有一些已弃用的常量 他们需要留下来 我不想收到关于它们的警告 但是如果稍后在我的项目中出现其他已弃用的常量 我确实希望收到警告 Apple 的标头将它们声明如下 extern NSString const NameOfString
  • 按钮文本位置与浏览器不同

    无论是在 firefox chrome 还是 opera ie 中 按钮文本位置都不同 我有一个按钮和文字 在 Opera 中 它比在 Firefox 中低一点 HTML
  • 如何使用户控件部分类了解基类中声明的控件?

    我们是否必须做一些特殊的事情才能让 ASP NET 分部类了解在用户控件的基类中声明的控件 分部类不断为基类中的控件生成声明 这意味着基类中的控件被隐藏并且为空 CodeFileBaseClass 属性可应用于 Page http msdn
  • PostgreSQL 检查数组是否包含左侧数组中的任何元素

    我知道在 PostgreSQL 中你可以运行如下查询 SELECT 1 ANY 1 3 4 7 int AS result检查右侧数组是否包含该元素1 我想知道是否有一种简单的方法来检查右侧数组是否包含来自左手大批 就像是 SELECT 2
  • 使用主干js加载模板

    我开始进行 javascript 开发 并使用 node js 作为休息 API 和使用主干的客户端做了一个简单的项目 一切看起来都很完美 直到我想从我的 js 中获取模板 我发现了不同的方法 其中一些需要一段时间 例如一年 但我不明白哪种
  • 使用 Ember Data 处理服务器端验证

    我在使用 Ember 和 Ember Data 处理服务器端验证时遇到问题 当发生验证错误时 API 返回代码 422 然后 Ember 数据会触发becameInvalid模型上的回调 从这里开始 我不确定处理我遇到的错误的最佳方法是什么
  • $(e.currentTarget) 和 $(this) 之间有区别吗?

    下面两种方法有什么区别吗 1 比 2 快吗 1 selector on click function this do stuff with clicked element and 2 selector on click function e
  • 将参数传递给 IIFE

    将参数传递给存储在变量中的 IIFE 的正确语法是什么 下面的例子告诉我foo未定义 无论我是否调用该函数 var bar function foo return getFoo function return foo foo console
  • 错误 440“数组索引越界”

    我正在尝试下载带有主题关键字的 Excel 附件 我设法创建了一个代码 但有时它给出了错误440 Array Index out of Bounds 代码就卡在这部分了 If Items i Class Outlook OlObjectCl
  • d3.js v4.0 中 d3.scale.category10() 的等效项是什么?

    我正在尝试通过交互式 Web 可视化一书来学习 d3 但 4 0 版本发生了很多变化 我真的无法弄清楚的一件事是是否有 d3 scale category10 的等效项来轻松映射到颜色 新版本中是否有类似的东西 或者我们需要使用 math
  • 向函数传递两个指向同一联合成员​​的指针是否违反了严格的别名规则? [复制]

    这个问题在这里已经有答案了 注意 学习严格的别名规则 请耐心等待 代码示例 t935 c include
  • 使 Loopback API Ember.js 兼容

    我正在尝试使用 Loopback 来获取与 Ember 对话的 API Ember 要求 JSON 包含在 键 中 例如对于一个帐户 account domain domain com subdomain test title test d
  • Alpine 操作系统上的 Php7 Redis 客户端

    我使用 alpine 3 5 作为基础镜像制作了一个 docker 镜像 我希望我的 php 应用程序在容器内运行以与 redis 服务器通信 但我在 Alpine 中找不到任何 php7 redis 客户端 有解决办法吗 我尝试使用pec
  • 将图像分成3*3的块

    我有一个矩阵 它的维度恰好不是 3 的倍数 或者可能是 3 的倍数 我们怎样才能将整个图像分成3 3矩阵块 可以忽略最后不属于3 3倍数的 另外 3 3矩阵可以保存在数组中 a 3 b 3 window size x size f 1 a
  • 在文本框中输入文本

    谁能告诉我为什么会这样jsFiddle http jsfiddle net 4NwZ9 不起作用 这个想法很简单 只是假设将选定的文本输入到文本框中 HTML
  • 配置 Qt Creator 以与 GDB 一起使用

    我的机器上有 GDB 和 CDB 我的 Qt 创建者正在使用 CDB 进行调试 我试图指向GDB路径 但它不起作用 如何设置 Qt Creator 使用 GDB 进行调试 确保您已将 Qt Creator 设置为 调试 构建配置 构建菜单
  • 在鼠标悬停在画布上的形状/位置(坐标)上时显示工具提示

    当鼠标悬停在画布上的某些位置时 我试图显示相应的工具提示 例如 当鼠标在画布上的坐标为 100 100 时 显示tooltip1 当鼠标位置在 200 200 时 显示tooltip2等 我已经添加了事件侦听器来检测鼠标移动并获取鼠标位置
  • 使用 Java 验证 CSV 文件

    我正在逐行读取文件 如下所示 FileReader myFile new FileReader File file BufferedReader InputFile new BufferedReader myFile Read the fi