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