【问题标题】:FileWriter method is only writing last lineFileWriter 方法只写最后一行
【发布时间】:2014-05-13 22:49:32
【问题描述】:

我有一个 fileWrite() 方法,它接受两个字符串值作为参数(特定的数组值)。我将此方法包含在 for 循环中,以便它可以循环遍历数组并获取要写入文件的字符串值

public void writeFile(String ip, String vals) {

    try {

         bw = new BufferedWriter(new FileWriter("Finished.txt"));

        bw.write(ip + ": " + vals );
        bw.newLine();


        bw.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

我在代码中包含该方法的地方如下所示:

for (int i = 0 ; i  < address.length ; i++) {
writeFile(address[i][0], address[i][1]);
        }

似乎只是将数组中的最后一个值写入文本文件。

【问题讨论】:

  • 以下答案之一是否回答了您的问题?请选择一个作为解决方案!

标签: java arrays filewriter


【解决方案1】:

使用 for 循环将所有内容写在一个打开的内容中,例如:

try
{
 int length = ip.size();

 bw = new BufferedWriter(new FileWriter("Finished.txt"));
 for (int i = 0; i < length; i++)
 {
      writeLineToFile(bw, ip, vals);
 }
 bw.close();
}

【讨论】:

    【解决方案2】:

    在循环中使用另一个构造函数

    FileWriter(File file,
                  boolean append)
    

    或更好

    1. 打开一次
    2. 免费资源

    【讨论】:

      【解决方案3】:

      就像@climbage 所说,你正在覆盖你的文件。

      我会建议以下两种解决方案之一:

      1)通过引用传递BufferedWriter并将函数名称更改为writeLineToFile(为清楚起见):

      void callingFunction()
      {
         <<get line>>
         bw = new BufferedWriter(new FileWriter("Finished.txt"));
         writeLineToFile(bw, ip, vals);
         bw.close();
      }
      
      void writeLineToFile (BufferedWriter &bw, String ip, String vals)
      {
         <<do something>>
      }
      

      2) 将要写入的整个文件分组为字符串数组并将其传递给函数:

      void writeFile (std::vector<String> &ip, std::vector<String> &vals)
      {
         <<check that vectors are same size>>
         int len = ip.size();
      
         bw = new BufferedWriter(new FileWriter("Finished.txt"));
         for (int i=0; i < len; ++i)
         {
            <<do something>>
         }
         bw.close();
      }
      

      【讨论】:

      • 注意:有几种方法可以遍历向量……我只选择了最简单的;但是,您应该确保向量的大小相同。更好的是,在 write 函数之前连接字符串并传递一个向量。
      【解决方案4】:

      每次调用都会覆盖文件

      new BufferedWriter(new FileWriter("Finished.txt"));
      

      最好打开文件一次,写入所有数据,然后关闭它。

      【讨论】:

      • 嗯...完成答案! :-)
      猜你喜欢
      • 2021-07-18
      • 2011-06-25
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多