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

OpenCSV - copying one csv file to another while adding a column

我正在尝试使用 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" 列。

下面的"enlarges" element-Array by one,使您可以在新创建的最后一个索引中放一些东西。然后保存那个数组。

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);
    }

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

'reader.readNext()' return 输入的一行作为字符串数组,我们基本上需要向其中添加一个元素以用于输出。

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;
}