我一直在搜索,似乎给定的答案对我不起作用。
我的代码相对简单,它生成一个对象数组,用一些随机字符串填充它,然后尝试输出到一个文件。这个想法基本上是生成一个包含一些名称、登录名、密码等的 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
我如何强制它继续使用相同的文件并只追加新行?