FileWriter方法只写最后一行

时间:2014-04-02 14:46:49

标签: java arrays filewriter

我有一个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]);
        }

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

4 个答案:

答案 0 :(得分:3)

每次调用

时都会覆盖该文件
new BufferedWriter(new FileWriter("Finished.txt"));

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

答案 1 :(得分:0)

就像@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();
}

答案 2 :(得分:0)

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

FileWriter(File file,
              boolean append)

或更好

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

答案 3 :(得分:0)

使用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();
}