将多行写入CSV

时间:2016-12-12 18:49:22

标签: java file-io

我的值对象有多行说:

color: map-get($colors, primary)

我想将这些行转换为大写并同时写入csv文件。我下面的代码只写了最后一个条目,即" mno"进入o / p文件。因为它覆盖了现有的。

abc
xyz
pqr
mno

如何实现结果,以便andy.csv读取如下:

private Object transformFieldValue(Object value) throws IOException {
    String upperCase = value.toString().toUpperCase();
    File file = new File("andy.csv");
    FileWriter fr=null;

    try {
        fr = new FileWriter(file);
        fr.write(upperCase);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            fr.flush();
            fr.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    return upperCase;
}

2 个答案:

答案 0 :(得分:0)

  

因为它覆盖了现有的。

是的,但它覆盖了文件。我的猜测是你有一个调用transformFieldValue的循环,每次输入该方法时,你都会创建一个新文件和一个新的FileWritter

  1. 转换您班级的File fileFileWriter fr成员(即全局变量)。

  2. 创建3种方法:createNewFile()writeToFile()closeFile()

    一个。 createNewFile()应包含以下内容:

    File file = new File("andy.csv");
    FileWriter fr=null;
    try {
        fr = new FileWriter(file);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    writeToFile()应包含:

    String upperCase = value.toString().toUpperCase();
    fr.write(upperCase);
    

    ℃。 closeFile()应包含:

    fr.flush();
    fr.close();
    
  3. 在需要的地方添加try-catch-finally

    但如果您想获得更多更好的帮助,请发布适当的Minimal, Complete, and Verifiable example

答案 1 :(得分:0)

你的问题的答案可能是:

更改

fr = new FileWriter(file);

fr = new FileWriter(file, true);

"真"将启用附加字节到文件末尾。

不要忘记创建换行符。对于不同的操作系统,这可能有所不同:

fw.write("\r\n");

...例如用于Windows换行符。

BUT:

正如您所提到的,它应该"将这些行转换为大写并同时写入csv文件"这显然违反了单一责任原则。我建议将“准则”放在整个“34岁以上的堆栈交换代码审查”中。