我有这个代码将数组元素复制到文本文件中,复制文件后,我有一个按钮打开我复制的文件。
try
{
print = new PrintWriter("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt");
print.println("EMPLOYEES PAYROLL RECORD AS OF "+dateFormat.format(date));
print.println();
for(int x=0;x<department.length;x++)
{
print.println("DEPARTMENT: "+department[x].toUpperCase());
print.println("\tPAYROLL PERIOD\tEMPLOYEE NUMBER\tNAME\tPAY RATE\tHOURS WORKED\tSALARY");
print.println();
for(int y=0;y<trans.length;y++)
{
if(trans[y] == null)
{
continue;
}
if(trans[y].getDepartment().equals(department[x]))
{
print.println("\t"+trans[y].getPayrollPeriod()+"\t"+trans[y].getEmpNo()+"\t\t"+trans[y].getName()+"\t"+trans[y].getPayRate()+"\t\t"+trans[y].getHoursWorked()+"\t\t"+String.format("%,.2f", (trans[y].getPayRate()*trans[y].getHoursWorked())));
total+=(trans[y].getPayRate()*trans[y].getHoursWorked());
}
}
print.println("\t\t\t\t\t\t\t\t\tTOTAL:\t"+String.format("%,.2f", total));
print.println();
total=0;
}
print.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
不幸的是,我的文本文件没有更新,除非我关闭系统。
有没有办法在没有关闭系统的情况下自动更新我的文本文件?
答案 0 :(得分:3)
您实际上可以创建PrintWriter with autoFlush turned on
:
print = new PrintWriter(new FileOutputStream
("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt"), true);
此处第二个参数是true
。根据Javadoc:
autoFlush - A boolean; if true, the println, printf, or format methods will flush the output buffer
答案 1 :(得分:0)
这取决于系统。 flush()通常应该可以工作,但这并不是很好的。 有一些嵌入式Flash文件系统,您也可以调用同步。
但是对于第一个apporach尝试flush()
答案 2 :(得分:0)
您需要清空流,才能将其写入文件。正如其他人所建议的那样,使用.flush()
来完成此操作,而不必使用.close()
您的信息流。否则,我相信.close()
会自动为您调用.flush()
,以确保您的信息流已清空,并将其内容写入磁盘或您指向的任何位置。
答案 3 :(得分:0)
在文档中,据说PrintWriter不会自动刷新行。
您可能需要为PrintWriter使用不同的构造函数:
PrintWriter(File file)
但你必须打开文件本身,然后在写完后关闭它。