我有List<ArrayList<String>>
个对象,我想将它们逐行写入Java中的csv文件中。
List<ArrayList<String>> contains
[[fileName, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[cadName, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[number, abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
[folder_Id, 098123, 098124, 094123, 0981290, 09812354],
[Directory_Path, 098123, 098124, 094123, 0981290, 09812354],
[wC_State, Working, WIP, Released, Development, Working],
[legacy_Path, C:\WC, C:\WC, C:\WC, C:\WC, C:\WC],
[reverified, Empty, Empty, Empty, Yes, Empty],
[createdBy, 12132019, 12092019, 12072019, 12132018, 12132019],
[originDate, 12132019, 12092019, 12072019, 12132018, 12132019],
[iteration, 2, 8, 13, 19, 3],
[shouldImport, True, True, True, True, True],
[Mymap, True, True, True, True, True],
[YourMap, True, True, True, True, True]]
到目前为止,我已经尝试了以下代码
String csv = "C:\\Users\\Output.csv";
CSVWriter writer = null;
try {
writer = new CSVWriter(new FileWriter(csv),'|',CSVWriter.NO_QUOTE_CHARACTER,
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
for(ArrayList<String> each: databaseColListHeaderChange){
writer.writeNext(each.toArray(new String[each.size()]));
}
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我正在csv文件中明智地获取数据行。 有什么办法可以将列表列中的ArrayList明智地写入csv文件
现在我得到以下格式的CSV文件
fileName|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
cadName|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
number|abc.sldprt|pqr.sldprt|jku.sldprt|cmx.sldprt|abc.sldprt
folder_Id|098123|098124|094123|0981290|09812354
Directory_Path|098123|098124|094123|0981290|09812354
wC_State|Working|WIP|Released|Development|Working
legacy_Path|C:\WC|C:\WC|C:\WC|C:\WC|C:\WC
reverified|Empty|Empty|Empty|Yes|Empty
createdBy|12132019|12092019|12072019|12132018|12132019
originDate|12132019|12092019|12072019|12132018|12132019
iteration|2|8|13|19|3
shouldImport|True|True|True|True|True
Mymap|True|True|True|True|True
YourMap|True|True|True|True|True
我需要以下格式的数据
fileName|cadName|number|folder_Id|Directory_Path
abc.sldprt|abc.sldprt|abc.sldprt|098123|098123
pqr.sldprt|pqr.sldprt|pqr.sldprt|098124|098124
jku.sldprt|jku.sldprt|jku.sldprt|094123|094123
cmx.sldprt|cmx.sldprt|cmx.sldprt|0981290|0981290
abc.sldprt|abc.sldprt|abc.sldprt|09812354|09812354
...so on all the list
是否有任何建议或帮助?
答案 0 :(得分:0)
You need to normalize your data into a map where key will be your first arrayList entry and value will be the rest of the list.
{
fileName=[abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
cadName=[abc.sldprt, pqr.sldprt, jku.sldprt, cmx.sldprt, abc.sldprt],
...
}
and then use the map keys as headers
答案 1 :(得分:0)
您只需要仔细考虑一下您要手动写出该数组的内容的步骤。
这个Java风格的伪代码的基本内容:
for(int column=0; column<numColumns; column++) {
for(int row=0; row<numRows; row++) {
output content[row][column];
output "|" when necessary
}
output newline
}
此操作与您已经完成的操作之间的主要区别在于,您将content[column][row]
的顺序翻转为content[row][column]
。
请注意,如果这不是学术活动,则应使用Commons CSV之类的库来读取/写入类似CSV的数据,因为可能存在细微问题,并且已经解决。< / p>