OpenCSV - 在添加列时将一个csv文件复制到另一个文件

时间:2017-06-19 17:25:40

标签: java json csv opencsv

我正在尝试使用OpenCSV从一个CSV文件中读取。然后我想复制输入csv中的所有数据并将其输出到另一个csv文件,同时添加一个包含信息的新列。

public void run_streets_tsv( String tsvIn, String tsvOut) throws Exception
{

    CSVReader reader = null; 
    CSVWriter writer = null;

    try
    {

        reader = new CSVReader((new FileReader(tsvIn)));
        writer = new CSVWriter(new FileWriter(tsvOut), '\t');

        String element [] = null;
        List<String[]> a = new ArrayList<String[]>();

        while((element = reader.readNext()) != null){
            for(int i = 0; i<element.length; i++){
                a.add(i, element);
                //a.add("JSON");  need to add this json element at the end of each column 
            }
        }
        writer.writeAll(a);
    }
    catch(Exception e)
    {
        throw e;
        } 
    finally
    {
        reader.close();
        writer.close();
        }
    }

我尝试的另一种方法是这样的(更改while循环,所有其他代码保持不变):

        String element [] = null;
        while((element = reader.readNext()) != null){
            ArrayList list = new ArrayList(Arrays.asList(reader));
            list.add(element);
            list.add("JSON");
            writer.writeNext(element);
        }

这样可以正确打印所有行,但它只是复制。我想在其数据中添加额外的“JSON”列。

2 个答案:

答案 0 :(得分:0)

以下“放大”element - 数组,使您可以在新创建的最后一个索引中放置一些内容。然后保存该数组。

import java.util.Arrays;

    String element[] = null;
    while((element = reader.readNext()) != null){
        element = Arrays.copyOf(element, element.length + 1);
        element[element.length - 1] = "JSON";
        writer.writeNext(element);
    }

答案 1 :(得分:0)

好的,虽然我看到一些错误,但你很接近。

&#39; reader.readNext()&#39;从输入返回一行作为String数组,我们基本上需要为此输出添加一个元素。

while((element = reader.readNext()) != null) {
    String[] output = getExpandedArray(element);
    a.add(output);
}

您需要实现getExpandedArray,我将启动它。

private String[] getExpandedArray(String[] input) {
    String[] output = null;
    //Populate/create output from input, but with the array 1 bigger. 
    output[output.length -1] = "JSON";
    return output;
}