问题标签 [apache-commons-csv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1808 浏览

java - apache-commons-csv println 方法不在输出中打印换行符

我是 apache-commons-csv 1.6 的新手

我有一个基本要求,即在新行中打印每条记录的 csv 文件。我正在尝试使用 CSVPrinter 的 println 方法。出于某种奇怪的原因,输出文件没有任何换行符。所有内容都打印在一行中。

我试图在 Notepad++ 中打开输出并显示不可打印的字符。记录之间没有字符。任何帮助将不胜感激。谢谢。

预期结果:

id|类型|值|键

4|excel|0|excel.sheet.no

5|excel|dd/MM/yyyy|excel.date.format

6|excel|0|excel.baserate.rownum

实际结果:id|type|value|key4|excel|0|excel.sheet.no5|excel|dd/MM/yyyy|excel.date.format6|excel|0|excel.baserate.rownum

0 投票
3 回答
5526 浏览

java - 如何使用 Apache Common CSV CSVPrinter 添加新行?

我有一个包含使用Apache Common CSV library 1.5生成 CSV 文件的方法的类

我的主类中有一个方法,该方法将调用该方法generateCSV()几次。
如何编写新行并将其附加到现有的 CSV 文件?使用我当前的实现,它将继续覆盖我的第一行。

更直接的解决方案是在任何 Java 集合(数组或列表)中收集我的所有数据,然后在最后迭代集合并将其一次性写入 CSV。但我不会那样做。我更喜欢在 CSV 中写入一行,然后执行其他操作,然后再次调用该方法以写入新行并将其附加到现有的 CSV 中。

谢谢。

0 投票
1 回答
1329 浏览

java - Apache Commons CSV 框架是否提供内存高效的增量/顺序模式来读取大文件?

Apache Commons CSV项目非常适合解析逗号分隔值、制表符分隔的数据和类似的数据格式。

我的印象是这个工具完全读取一个文件,结果行对象保存在内存中。但我不确定,我找不到任何关于这种行为的文档。

对于非常大的解析,我想进行增量读取,一次一行,或者一次可能相对少量的行,以避免压倒性的内存限制。

仅就内存使用而言,这里的想法类似于 XML 的 SAX 解析器如何增量读取以最小化 RAM 的使用,而 DOM 样式的 XML 解析器将文档完全读入内存以提供树遍历。

问题:

  • Apache Commons CSV 在读取文档方面的默认行为是什么:完全进入内存,还是增量?
  • 可以在增量文档和整个文档之间更改此行为吗?
0 投票
0 回答
193 浏览

java - 从 CSV java 中选择列值的行

我有一个基于“url”列的值排序的 CSV。我想为每个“url”值选择前三行。如果 url 值的行小于 3(2 或 1),我还是想选择它们。

起始 CSV 如下:

我想获得:

我从这段代码开始,但只选择了一行。

0 投票
1 回答
6193 浏览

java - 通过 UTF-8 中的 Apache CSV 生成 CSV

如何通过 Apache CSV 以 UTF-8 编写 CSV 文件?

我正在尝试通过以下代码生成 csv,其中 Files.newBufferedWriter() 默认将文本编码为 UTF-8,但是当我在 excel 中打开生成的文本时,会出现无意义的字符。

我像这样创建 CSVPrinter:

接下来我设置标题

然后在循环中的下一个我像这样将值打印到写入器中

我还尝试将文件上传到在线 CSV lint 验证器,它告诉我使用的是 ASCII-8BIT 而不是 UTF-8。我做错了什么?

0 投票
1 回答
989 浏览

csv - 重复的标题名称 Apache Commons-csv(withAllowDuplicateHeaderNames 不起作用)

我正在使用最新版本的 common-csv 库,例如在我的pom.xml中,我有这个依赖项:

该库用于在 Java 应用程序中编写简单的 CSV 文件。在特定用例中,可以复制 csv 文件的列名标题。我发现 CSVFormat 类的一个有趣属性在这种情况下一定很有用,但是在下面描述的每个解决方案中,程序都会因错误而终止,例如:

编写的代码是:

我已经尝试了4种情况:

该属性是否存在错误withAllowDuplicateHeaderNames?重写库的代码源来改变CSVFormat.class的验证方法是非常困难的

0 投票
1 回答
344 浏览

java - 如何在 CSV 文件的特定单元格中写入?

.csv我需要在文件中的特定单元格中写org.apache.commons.csv入库,而不会迭代并复制所有行。

我试过这个:

但是,这是不允许的。

编辑 1

我的 IDE 提到:The type of the expression must be an array type but it resolved to CSVRecord

0 投票
1 回答
2200 浏览

java - 如何将 CSVRecord 转换为 List?

我需要将 a 转换CSVRecord为 aList以获取元素的位置。

所以我用了这个:

但是,records.get(0)返回 aList<CSVRecord>而不是List<String>...

此外,我不能使用csvParser.getHeaderNames();,因为之后我需要复制带有标题的文件。

0 投票
2 回答
1688 浏览

java - 使用 HashMap 中的列和值创建 CSV 文件

温柔点,这是我第一次使用 Apache Commons CSV 1.7。

我正在创建一个服务来处理一些 CSV 输入,从外部来源添加一些额外的信息,然后写出这个 CSV 以摄取到另一个系统中。

我将收集到的信息存储到 HashMap<String, String>最终输出 csv 的每一行的列表中。Hashmap 包含<ColumnName, Value for column>.

我在使用 CSVPrinter 将 HashMaps 的值正确分配到行中时遇到问题。我可以将值连接成一个字符串,变量之间有逗号;但是,这只是将整个字符串插入第一列。

我无法定义或硬编码标头,因为它们是从配置文件中获得的,并且可能会根据使用该服务的项目而改变。

这是我的一些代码:

感谢你的协助。

0 投票
2 回答
1455 浏览

java - Apache Commons CSV 不会忽略缺失的列

使用 Apache Commons CSV 进行解析,但不会忽略丢失的列并引发异常。

使用此示例数据:

下面的代码record.get(DataColumns.surname)抛出java.lang.IllegalArgumentException: Mapping for surname not found, expected one of [name, surname, age]. 我需要它返回 null、可选或默认值。有什么选择吗?我知道这是可能的,record.toMap().get(DataColumns.surname.name())但它的性能不会很好: