java - 遍历从 OpenCSV 生成的 Map
问题描述
我有一列数据,从Google Sheets
as输出CSV
,也从LibreOffice
as输出CSV
。我尝试使用编组这两个文件,OpenCSV
但只获得一小部分可用数据。
我怎样才能读入这个文件?我真的没有在这个CSV
文件中看到任何逗号......但它只是一列数据。
文件:
thufir@dur:~/jaxb$
thufir@dur:~/jaxb$ head input.csv
Field 1
Foo # 16
bar
baz
fdkfdl
fdsfdsfsdfgh
thufir@dur:~/jaxb$
输出:
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$ gradle run
> Task :run
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Field 1
Jan 10, 2019 3:36:08 PM net.bounceme.dur.basexfromjaxb.csv.ReaderForCVS printMap
INFO: Foo # 16
BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
thufir@dur:~/NetBeansProjects/BaseXFromJAXB$
代码:
package net.bounceme.dur.basexfromjaxb.csv;
import com.opencsv.CSVReaderHeaderAware;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Logger;
public class ReaderForCVS {
private static final Logger LOG = Logger.getLogger(ReaderForCVS.class.getName());
private Map<String, String> values;
public ReaderForCVS() {
}
public void unmarshal(URI inputURI) throws Exception {
FileReader f = new FileReader(new File(inputURI));
values = new CSVReaderHeaderAware(f).readMap();
}
public void printMap() {
Collection<String> stringValues = values.values();
for (String s : stringValues) {
LOG.info(s);
}
for (Map.Entry<String, String> item : values.entrySet()) {
String key = item.getKey();
String value = item.getValue();
LOG.info(key);
LOG.info(value);
}
}
}
坦率地说,我无法判断图书馆是否正在以一种时髦的方式读取文件,或者文件是否以某种方式被破坏,或者是什么。我会从网站上寻找CSV
,但不确定那是什么。我看不出库没有正确解析,但我也看不到这些数据的问题。
从电子表格中导出数据的方法只有这么多CSV
,我已经尝试了一些。文件的内容无关紧要,但我正在处理的是那种结构:没有内容的行,只有一列,特殊字符。
以文本形式读入文件可提供所需的输出...
解决方案
看起来它的工作方式类似于其他 CSVReaders OpenCSV Guide Reading。这是我使用的一些示例代码,它似乎有效:
CSVReaderHeaderAware csvReaderHeaderAware= new CSVReaderHeaderAware(new StringReader(DAOConstants.IND_DATA));
while (((values = (Map<String, String>) csvReaderHeaderAware.readMap())) != null)
{
for (Map.Entry<String,String> entry : values.entrySet())
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
推荐阅读
- sql - 找出每位员工销售最多的产品
- python - 如何从列中的所有数字中去除 \xa3?
- php - 在循环内添加或插入条件
- angularjs - Angularjs 只允许第一行的数据更新
- javascript - 在javascript中将li内容附加到表单输入值中
- vba - 如果第一列有特定文本,则转置 Excel 行
- java - “SSLHandshakeException:没有共同的密码套件”
- python - 如何在动态更改文本上使用“grep”?
- javascript - 将 EventListener 应用于表格而不是每个单元格。如何?
- angular - Angular 5:在后面检查来自 Django API 的新消息