有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将多行写入CSV

我的值对象有多行,例如:

abc
xyz
pqr
mno

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

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

如何达到让安迪满意的结果。csv的内容如下:

ABC
XYZ
PQR
MNO

共 (2) 个答案

  1. # 1 楼答案

    你的问题的答案可能是:

    改变

    fr = new FileWriter(file);
    

    fr = new FileWriter(file, true);
    

    “true”将允许在文件末尾追加字节

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

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

    。。。e、 g.对于窗口换行符

    但是:

    正如您提到的,它应该“将这些行转换为大写,同时写入csv文件”,这显然违反了单一责任原则。我建议在“Stack Exchange代码审查”中对整个代码进行试用

  2. # 2 楼答案

    Because it is overwriting over existing ones.

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

    1. 转换类的File fileFileWriter fr成员(即全局变量)

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

      a.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();
      }
      

      b.writeToFile()应包含:

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

      c.closeFile()应包含:

      fr.flush();
      fr.close();
      

    在需要的地方添加try-catch-finally

    但是如果你想要更多更好的帮助,请发布一个合适的Minimal, Complete, and Verifiable example