0

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

我的代码相对简单,它生成一个对象数组,用一些随机字符串填充它,然后尝试输出到一个文件。这个想法基本上是生成一个包含一些名称、登录名、密码等的 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

我如何强制它继续使用相同的文件并只追加新行?

4

1 回答 1

3

在构造函数PrintWriter(Writer out, boolean autoFlush)上,第二个布尔参数实际上是用于自动刷新,而不是附加模式。

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

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

代替

PrintWriter out = new PrintWriter(new FileWriter("testlog.txt"), true);
于 2013-04-03T21:47:35.833 回答