【问题标题】:Text file writing from arraylist object using FileWriter class使用 FileWriter 类从 arraylist 对象写入文本文件
【发布时间】:2013-06-28 11:11:05
【问题描述】:

它工作正常,但我需要逐行写入数据。我从 arraylis 对象获取一个数据,并希望将信号线写入文本文件。第二个对象应该在下一行。

public void writeFile() {
    FileWriter writer = null;
    try {
        writer = new FileWriter("E:/AutomationToolWorkplace/AutomationTool/Test/ExpectedOutputHomescreenModule1.txt");
        for (String str : MP_result_set) {
            System.out.println("");
            writer.write(str);
        }
        writer.close();
    } catch (IOException ex) {
        Logger.getLogger(Transciever.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            writer.close();
        } catch (IOException ex) {
            Logger.getLogger(Transciever.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

输出:

{"data":
{"shared":false,
"port":"4096",
"packageName":"",
"installed":false,
"lock":false,
"like":false,
"type":"HomeScreen",
"ip":"192.168.1.24",
"screenId":"9999",
"selected":false,
"category":"",
"servicetype":"",
"price":"",
"subscribe":false,
"event":false,
"subtype":"Recommended",
"predefined":false,
"pricingmodel":"PPC",
"packageSelected":false}}

{"data":{
"port":"4096",
"screenId":"2050",
"result":"failure",
"recordList":[],
"reminderList":[],
"msg":"No record",
"playList":[],
"ip":"192.168.1.24"}}

{"data":{
"port":"4096",
"screenId":"12105",
"result":"success",
"list":["music","Action","Romance","Horror","Comedy","Thriller","Mystery","Drama"],
"type":"genre",
"ip":"192.168.1.24"}}

【问题讨论】:

  • 为什么是 Swing 标签?您所说的问题不包含 Swing 代码?
  • MP_result_setArrayList<String>?澄清一下,你想在你的文件中每 {"data" ... ] 在单独的行中写入,不是吗?在这种情况下使用 writer.write(str + "\n") 代替;

标签: java swing io


【解决方案1】:

您可以简单地将“\n”附加到您编写的每个字符串,或使用PrintWriter

将对象的格式化表示打印到文本输出流。

最简单的解决方案是使用Apache Commons IOUtils 和IOUtils.writeLines() 方法,该方法接受一个集合和一个写入器。它避免了您自己执行迭代的需要。

【讨论】:

    【解决方案2】:

    这样的?

    writer.write(str + "\n");
    

    【讨论】:

    • 做迈克尔的解决方案。看起来很干净。
    【解决方案3】:

    替换这个:

    System.out.println("");
    

    用这个:

    writer.write("\n");
    

    【讨论】:

      【解决方案4】:

      要逐行编写语句,请将BuffererdWriter 包裹在您的FileWriter 周围并使用newLine()

      BufferedWriter bw = new BufferedWriter(new FileWriter(path));
      bw.write(str);
      bw.newLine();
      

      正如 Piovezan 所说,您还应该删除 System.out.println(""),因为它只会将换行符打印到您的标准输出,而不是您的文件。

      【讨论】:

      • 您可以尝试在关闭编​​写器之前添加bw.flush(); 以确保所有行都写入文件
      猜你喜欢
      • 2016-05-07
      • 2014-03-13
      • 2015-07-18
      • 2020-09-29
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2011-03-01
      • 2016-01-30
      相关资源
      最近更新 更多