是否有任何方法可以通过使用“ |”来写csv列作为Java中的分隔符

时间:2019-04-23 14:57:41

标签: java arraylist opencsv

我有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

是否有任何建议或帮助?

2 个答案:

答案 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>