java - 无法在Filewriter上获得“追加模式”来为我工作

时间:2013-04-03 21:45:16

标签: java

我一直在搜索,似乎给定的答案对我不起作用。

我的代码相对简单,它生成一个对象数组,用一些随机字符串填充它然后尝试输出到文件。这个想法基本上是生成一个带有一些名称,登录名,密码等的CSV文件,名称是随机字母的字符串(长篇故事,它是用户大量填充环境......)

我有一个像这样的“作家”课:

    public class Writer {
    public static void log(String message) throws IOException { 

     PrintWriter out = new PrintWriter(new FileWriter("testlog.txt"), true); 
     out.println(message);

  out.close();
}
}

这样的循环:

    for (int y=0; y < num_names; y++) {
           try {
            Writer.log(arrayTest[y].first + "," + arrayTest[y].last + "," +     arrayTest[y].loginName + "," + arrayTest[y].password +
                    "," + arrayTest[y].email);
        } catch (IOException ex) {
            Logger.getLogger(Csvgenerator.class.getName()).log(Level.SEVERE, null, ex);
        }


   System.out.println(arrayTest[y].first + "," + arrayTest[y].last + "," + arrayTest[y].loginName + "," + arrayTest[y].password + 
           "," + arrayTest[y].email);    

 }

我的期望是我将循环遍历arrayTest []中的每个对象,我将一行数据输出到文件中。 我包含System.out.println仅用于调试。

当我运行我的代码时,System.out.println证明它正常工作 - 我得到了10行的列表。 (num_names = 10这里)所以这证明每次我到达这行代码时,我都会打印出一个独特的“行”数据。

但是,在运行结束时,文件“testlog.txt”只包含一行 - 我输出中的最后一行。

我尝试过“out.append”而不是“out.println”,但没有区别。看起来每当我调用记录器时,它都会因某种原因重新创建文件。

所以换句话说,如果我的控制台输出(来自system.out.println)看起来像这样:

nxoayISPaX,aNQWbAjvWE,nanqwbajvwe,P@ssw0rd!,nanqwbajvwe@mylab.com
RpZDZAovgv,QOfyNRtIAN,rqofynrtian,P@ssw0rd!,rqofynrtian@mylab.com
SajEwHhfZz,VziPeyXmAc,svzipeyxmac,P@ssw0rd!,svzipeyxmac@mylab.com
sifahXTtBx,MRmewORtGZ,smrmewortgz,P@ssw0rd!,smrmewortgz@mylab.com
PlepqHzAxE,MQUJsHgEgy,pmqujshgegy,P@ssw0rd!,pmqujshgegy@mylab.com
VKYjYGLCfV,nuRKBJUuxW,vnurkbjuuxw,P@ssw0rd!,vnurkbjuuxw@mylab.com
YgvgeWmomA,ysKLVSZvaI,yysklvszvai,P@ssw0rd!,yysklvszvai@mylab.com
feglvfOBUX,UTIPxdEriq,futipxderiq,P@ssw0rd!,futipxderiq@mylab.com
RAQPPNajxR,vzdIwzFHJY,rvzdiwzfhjy,P@ssw0rd!,rvzdiwzfhjy@mylab.com
DeXgVFClyg,IEuUuvdWph,dieuuuvdwph,P@ssw0rd!,dieuuuvdwph@mylab.com

然后testlog.txt只包含一行:

DeXgVFClyg,IEuUuvdWph,dieuuuvdwph,P@ssw0rd!,dieuuuvdwph@mylab.com

如何强制它继续使用同一个文件并添加新行?

1 个答案:

答案 0 :(得分:3)

在构造函数PrintWriter(Writer out, boolean autoFlush)上,第二个布尔参数实际上是autoflush,而不是追加模式。

我认为您打算使用FileWriter(File file, boolean append)构造函数,即:

PrintWriter out = new PrintWriter(new FileWriter("testlog.txt", true));

而不是

PrintWriter out = new PrintWriter(new FileWriter("testlog.txt"), true);