Java 无法正确关闭文本文件
我有一段代码,它将数组元素复制到一个文本文件中,复制文件后,我有一个按钮打开我复制的文件Java 无法正确关闭文本文件,java,file,file-io,Java,File,File Io,我有一段代码,它将数组元素复制到一个文本文件中,复制文件后,我有一个按钮打开我复制的文件 try { print = new PrintWriter("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt"); print.println("EMPLOYEES PAYROLL RECORD AS OF "+dateFormat.format(date));
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();
}
试试看
{
print=新的PrintWriter(“C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt”);
print.println(“截至”+dateFormat.format(日期))的员工工资单记录);
print.println();
对于(intx=0;x,这在很大程度上取决于系统。
flush()通常应该可以工作,但这并不是全部。
还有一些嵌入式闪存文件系统,您也可以在其中调用sync
但对于第一种方法,请尝试在很大程度上依赖于系统的flush()。
flush()通常应该可以工作,但这并不是全部。
还有一些嵌入式闪存文件系统,您也可以在其中调用sync
但对于第一种方法,请尝试使用flush()
,您实际上可以创建一个:
这里第二个参数是true
。根据Javadoc:
autoFlush-布尔值;如果为true,则为println、printf或格式
方法将刷新输出缓冲区
实际上,您可以创建一个:
这里第二个参数是true
。根据Javadoc:
autoFlush-布尔值;如果为true,则为println、printf或格式
方法将刷新输出缓冲区
您需要清空流才能将其写入文件。正如其他人所建议的,使用.flush()
来完成此操作,而无需.close()
您的流。否则,我相信.close()
会自动调用.flush()
用于确保流已清空,且其内容已写入磁盘或任何您正在引导它的位置。您需要清空流才能将其写入文件。正如其他人建议的那样,使用.flush()
来完成此操作,而无需.close()
您的流。否则我相信.close>()
自动调用.flush()
,以确保流已清空,且其内容已写入磁盘或指向任何位置。在文档中,据说PrintWriter不会自动刷新行
您可能需要为PrintWriter使用不同的构造函数:
PrintWriter(File file)
但是您必须打开文件本身,然后在写入完成后关闭它。在文档中,据说PrintWriter不会自动刷新行
您可能需要为PrintWriter使用不同的构造函数:
PrintWriter(File file)
但是您必须打开文件本身,然后在写入完成后将其关闭。flush()
flush()
。我认为,PrintWriter
不会自动刷新。BufferedWriter
应该在写入X个字节之后。close()
应该,我认为,flush()
。您可以刷新().close()自动刷新。为什么不想关闭写入程序?一旦完成,就应该关闭写入程序。大多数都有自动刷新功能。我使用print.close()
关闭写入程序,对吗?我使用了flush()
但它仍然不工作…flush()
flush())
。我不认为PrintWriter
会自动刷新。BufferedWriter
应该在写入X个字节后进行。close()
应该,我认为,flush()
。您可以flush().close()自动刷新。为什么不想关闭写入程序?完成后应立即关闭写入程序。大多数都有自动刷新功能。我使用print.close()
关闭写入程序,对吗?我使用了flush()
但它仍然不起作用…自动刷新的布尔值的构造函数只有Writer
或OutputStream
类,没有字符串的构造函数。JonathanDrapeau:谢谢,这是一个愚蠢的复制/粘贴错误。我更正了它。这不是很像缓冲Writer
?@SnakeDoc:大致上是这样的,但是BufferedWriter
不提供println
etc方法。自动刷新的boolean
构造函数只有Writer
或OutputStream
类,没有一个带有字符串的构造函数。JonathanDrapeau:谢谢,这是愚蠢的复制/粘贴错误。我已经更正了。这不是吗非常类似于BufferedWriter
?@SnakeDoc:大致如此,但BufferedWriter
不提供println
等方法。