【问题标题】:Text file is overwritten on Ubuntu but appended in Windows文本文件在 Ubuntu 上被覆盖,但在 Windows 中附加
【发布时间】:2016-06-07 03:08:30
【问题描述】:

我正在创建一个文件并将其发送回网络浏览器:

    org.joda.time.format.DateTimeFormatter fmt2 = DateTimeFormat.forPattern("ddMMyyyy");
File file = new File("VE_ximport_"+dateLivraison.toString(fmt2)+".txt");

    FileWriterWithEncoding writer;  
    writer = new FileWriterWithEncoding(file,"UTF-8", true);
    PrintWriter printer = new PrintWriter(writer);
    for (Object[] obj : results){
       //handle data 
       printer.write(data);
    }
    printer.close();

我多次调用此函数,每次文件都被覆盖。 这是我正在寻找的行为。
它适用于 Ubuntu。
但是在 Windows Server 2012 R2 上,每次我调用该函数时,它都会将数据附加到现有文件中。
即使我在每次调用之间重新启动服务器,文件也会被附加,不会创建新文件。

我要生气了...
我哪里错了?

谢谢。

【问题讨论】:

    标签: java file-io append


    【解决方案1】:

    您似乎每次都为您的文件创建相同的名称,只要您在同一天进行 - 因为您使用掩码“ddMMyyyy”转换日期变量“dateLivraison”。典型的解决方案是获取当前时间戳并将其转换为字符串,该字符串不仅可以反映日期,还可以反映高达秒或毫秒的时间。这将确保创建的文件名的唯一性。

    【讨论】:

      【解决方案2】:

      不清楚你指的是哪个文件,但如果你问的是你在这一行创建的文件:

      writer = new FileWriterWithEncoding(file,"UTF-8", true)

      第二个参数只需使用 false,这样每次都会被覆盖。

      【讨论】:

      • 用户似乎希望每次都创建新文件,而不是覆盖或附加现有文件。你的回答没有回答问题
      • 实际上,如果创建的文件相同,则必须替换现有文件。 writer = new FileWriterWithEncoding(file,"UTF-8", true) 工作正常。但我不知道为什么它在 Ubuntu 上表现不同。还是谢谢!
      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2016-04-04
      • 2013-04-09
      • 2018-05-08
      • 2013-08-28
      • 2012-06-09
      • 2020-08-24
      • 2010-10-16
      相关资源
      最近更新 更多