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

Java OpenCSV-在添加列时将一个csv文件复制到另一个csv文件,java,json,csv,opencsv,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 CSVR

我正在尝试使用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();
        }
    }
这可以正确打印所有行,但它只是复制。我想添加额外的“JSON”列及其数据

以下内容将
元素
-数组“放大”一倍,使您能够在新创建的最后一个索引中放入一些内容。然后保存该数组

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()'以字符串数组的形式从输入返回一行,我们基本上需要为输出添加一个元素

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

System.arrayCopy(…)
可以使用一行来填充
输出
。是的,你可以,尽管问题来自初学者,我建议他们自己编写,以帮助他们了解java。这一行一行读对吗?我如何编辑它,使其逐列读取?@Felix Yes。为了逐列读取,您必须读取整个文件,因为
csv
逐行存储数据。要读取整个文件,请使用
reader.readAll()
。如果无法将整个文件存储在RAM中,则可以创建一个(例如,
ArrayList
),然后读取一行,将所需列添加到列表中,重复。但是,使用.readAll()不起作用,因为.readAll()需要一个列表@Poohl@Felix
.readAll()
不需要列表,它会返回一个列表。(
ArrayList content=reader.readAll()
)。还是我把你的问题搞错了?
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;
}