在JAVA中按列向CSV文件写入/追加数据
我想以以下方式将数据逐列写入/附加到CSV文件:在JAVA中按列向CSV文件写入/追加数据,java,csv,hashmap,csvreader,Java,Csv,Hashmap,Csvreader,我想以以下方式将数据逐列写入/附加到CSV文件: query1 query2 query3 data_item1 data_item7 data_item12 data_item2 data_item8 data_item13 data_item3 data_item9 data_item14 data_item4 data_item10 data_item5 data_item11
query1 query2 query3
data_item1 data_item7 data_item12
data_item2 data_item8 data_item13
data_item3 data_item9 data_item14
data_item4 data_item10
data_item5 data_item11
data_item6
我在hashMap中有数据,queryID(即query1,query2)是
对应的查询是值。
值(每个查询的数据项)位于列表中。
因此,我的哈希映射如下所示:
HashMap<String,List<String>> hm = new HashMap<String,List<String>>();
HashMap hm=newhashmap();
如何使用JAVA将这些数据逐列写入csv(如上所示)?
我试过CSVWriter,但做不到。谁能帮帮我吗 csv文件主要用于保存像表格一样结构化的数据。。。表示具有紧密上下文中的列和行的数据 在您的示例中,查询1、2和3之间似乎只有非常松散的连接,而项目1、7和12,或2、8和13之间没有水平连接,依此类推 除此之外,通常还可以沿行或行方便地写入文件。所以你打开文件,写一行,然后写另一行,依此类推 因此,要按要求以列方式写入数据,您必须在代码中重新构造数据,使写入一行的所有数据在写入该行时都可用,或者多次运行csv文件及其行,每次向行中添加另一项。当然,后一种选择非常耗时,没有多大意义 因此,我建议,如果这3个查询的数据之间确实没有联系,您可以将数据写入3个不同的csv文件:query1.csv、2.csv和3.csv 或者,如果您有一个水平连接,即项目1、7和12之间,等等,您可以将其写入一个csv文件,将数据组织成行和列。比如:
queryNo columnX columnY columnZ
1 item1 item2 item3
2 item7 item8 item9
3 item12 item13 item14
如何做到这一点在本线程中有详细描述:。
你也可以在这里找到其他例子经过几天的修补,我终于成功了。以下是实施方案:
for(int k=0;k<maxRows;k++) {
List<String> rowValues = new ArrayList<String>();
for(int i=0;i<queryIdListArr.length;i++) {
subList = qValuesList.subList(i, i+1);
List<String> subList2 = subList.stream().flatMap(List::stream).collect(Collectors.toList());
if(subList2.size()<=k) {
rowValues.add("");
}else{
rowValues.add(subList2.get(k));
}
}
String[] rowValuesArr = new String[rowValues.size()];
rowValuesArr = rowValues.toArray(rowValuesArr);
// System.out.println(rowValues);
writer.writeNext(rowValuesArr);
}
rowValuesArr是一个数组,为每个数组填充索引值
从qValuesList获取的值。
其思想是从所有子列表中获取每个索引的所有值,然后将这些值写入该行。如果找不到该索引的值,请写一个空白字符 1)CSV文件是一个文本文件,您必须逐行写入数据,因此无法实现逐列写入的愿望。如果您的意思是要在列中布局数据,则必须以这种方式组织数据,并逐行写入。--2) 为什么要尝试使用CSVReader来写入数据?你想用哪个CSV库?我用的是CSVWriter,我的意思是CSVWriter,错误地写了“csvreader”,抱歉。你需要CSV库吗?或者你会喜欢其他格式吗?我认为将这些数据存储为json可能是一个不错的选择。要求仅为CSV格式。
HashMap<String,List<String>> hm = new HashMap<String,List<String>>();
List<List<String>> qValuesList = new ArrayList<List<String>>();
qValuesList.subList(i, i+1);