当前位置: 首页 > 知识库问答 >
问题:

FileWriter方法只写入最后一行

乜安志
2023-03-14

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

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

共有3个答案

巫马正卿
2023-03-14

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

FileWriter(File file,
              boolean append)

或更好

  1. 打开一次
  2. 写入
  3. 可用资源
燕昊东
2023-03-14

就像@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();
}
陈誉
2023-03-14

您将在每次调用时覆盖该文件

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

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

 类似资料:
  • 相应的,文件读取有了,自然有文件写入类,使用方式与FileReader也类似: FileWriter writer = new FileWriter("test.properties"); writer.write("test"); 写入文件分为追加模式和覆盖模式两类,追加模式可以用append方法,覆盖模式可以用write方法,同时也提供了一个write方法,第二个参数是可选覆盖模式。 同样,

  • 问题内容: 我有下面的代码 执行后,文件创建成功,但创建的文件为空 那么代码有什么问题呢? 问题答案: 您必须关闭,否则不会刷新当前缓冲区。您可以直接调用该方法。 如果要关闭文件,则无需使用该方法。该可用于例如,如果一会你的程序运行和输出文件中的东西,你想在其他地方检查。

  • 我怎样才能使它出现而不必按回车键?!

  • 我创建了一个Java游戏,当游戏结束时,执行一个方法,告诉用户输入他/她的名字,然后他们的分数将保存在playscores中。txt文档。这很好用。然而,我想要的不仅仅是这份文件中一个人的分数。我想要它,这样每个玩游戏的名字和分数将保存在这个文件中。非常感谢您的帮助。 这是我的gameComplete方法代码: 我尝试过不同的东西,比如Objectoutputstream,但不幸的是,我不知道该怎

  • 好吧,opencsv有点工作,除了一次只写一行,删除以前的信息。如果我想要这样的csv: 汽车、年份、型号 马自达,1996年,模型a 法拉利,1998年,型号b 所以我每次得到的只是最后一行,无论我输入多少信息,代码都是这样的: 根据教程和例子,我看到这个代码应该工作,请帮助? array_body是"part_a#part_b#part_c"

  • 本文向大家介绍C#获取指定目录最后写入时间的方法,包括了C#获取指定目录最后写入时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#获取指定目录最后写入时间的方法。分享给大家供大家参考。具体如下: C#返回指定目录最后写入时间,主要用到了DirectoryInfo的LastWriteTime属性 希望本文所述对大家的C#程序设计有所帮助。