【问题标题】:Is there an easy way to append a new column that will be having same value for all rows in csv?是否有一种简单的方法可以附加一个新列,该列对于 csv 中的所有行都具有相同的值?
【发布时间】:2021-09-22 00:41:42
【问题描述】:

我正在处理如下文件并关闭它。稍后,我进行更多处理并获得一些我想附加到之前生成的 CSV 中所有行的 ID。所以所有行都将具有相同的值。

我创建数据并将数据附加到 csv 的初始代码:

    private StringBuilder stringBuilder = new StringBuilder(); 
    public void writeToFile(String[] tIds, PrintWriter printWriter) throws DataNotFoundException {
        int rowCount = 0;
        for(String id: tIds) {
            Data data = util.getData(id);
            csvHelper.prepareFileData(data, this.stringBuilder);
            rowCount++;
            
            if (rowCount == CHUNK_SIZE) {
                printWriter.println(this.stringBuilder.toString());
                this.stringBuilder = new StringBuilder();
                rowCount = 0;
            }
        }
        printWriter.close();
    }

现在进一步处理返回一些processedID,我想将其作为新列附加到所有行。

一个选项是这样的:

public void appendAgain(String processedId) {
        
                     BufferedReader br = new BufferedReader(new FileReader(feedFile));
            String output = "";
            String line;
            while ((line = br.readLine()) != null) {
                output += line.replace(",", "," + alertId + ",");
            }
            FileWriter fw = new FileWriter(feedFile, false); //false to replace file contents, your code has true for append to file contents
            fw.write(output);
            fw.flush();
            fw.close();
}

public void prepareFileForData(Data data, StringBuilder sb) {
   // map values from data to sb
   sb.append(data.getId());
   sb.append(",");
   sb.append(data.getName()); 
   .. and so on
}

请评论更好的方法或对当前方法的任何建议。谢谢!

【问题讨论】:

标签: java csv bufferedreader filewriter printwriter


【解决方案1】:

作为sed 命令执行:

sed -i '' 's/$/,<myProcessedID>/' myfile.csv

您可以在终端中运行,也可以使用 ProcessBuilder 从 java 中运行。

【讨论】:

  • 还有其他选择吗?
  • 这是最简单的。您可以在 Java 中通过逐行读取文件并将新行写入新文件,然后删除旧文件并将新文件重命名为旧文件名来执行此操作,但代码要多得多。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 2023-03-17
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 2017-09-08
相关资源
最近更新 更多