使用java创建新的CSV文件以添加新列

时间:2017-04-05 10:44:24

标签: java

我正在观察特定股票在30天内的表现。我从Yahoo finance下载了数据,该数据显示为CSV文件。如果我想在我的数据集中创建一个新列,以显示使用java refer to column H as where the output should appear打开和关闭之间的每日百分比变化,我应该怎么做?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以逐行编辑文件,并使用concat()功能添加分隔符。

使用FileReader or BufferedReader打开文件,然后开始解析。

官方Javadoc:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#concat(java.lang.String)

另请参阅this

答案 1 :(得分:0)

使用OpenCSV:http://opencsv.sourceforge.net/

public class OpenCSVTest {

    public static void main(String[] args) {

        StringWriter target = new StringWriter();

        try(CSVReader reader = new CSVReader(new StringReader("my,test")); 
            CSVWriter writer = new CSVWriter(target);) {
            for(String[] line : reader) {
                String[] added = Arrays.copyOf(line, line.length + 1);
                added[added.length-1] = "addition";
                writer.writeNext(added);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        System.out.println(target.toString());
    }
}

您可以将StringReaderStringWriter替换为您的输入和输出。然后,读者将为您迭代csv中的每一行。您可以复制原始行并添加新列并将其写入目标。

代码细分:

try(CSVReader reader = new CSVReader(new StringReader("my,test")); 
            CSVWriter writer = new CSVWriter(target);) { ... }

这是一个try-with-resources块。它确保读者和作者在完成后关闭。

for(String[] line : reader) {
     String[] added = Arrays.copyOf(line, line.length + 1);
     added[added.length-1] = "addition";
     writer.writeNext(added);
}

这是循环的标准。 CSVReader实现了Iterable接口,使我们能够直接在for循环中使用它。

Arrays.copyOf(line, line.length + 1);是一个函数,它创建传递给它的数组的副本,但是具有新的大小。由于您要添加列,我们会复制原始数组my,test并在其末尾添加1个空格,然后我们可以通过执行以下操作为其分配新值:added[added.length-1] = "addition";

最后,我们将它传递给编写器,编写器然后将值正确地写入目标,在本例中为StringWriter,在您的情况下可能是文件。