无法正确关闭文本文件

时间:2013-10-02 17:15:11

标签: 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));
        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();
    }

不幸的是,我的文本文件没有更新,除非我关闭系统。

有没有办法在没有关闭系统的情况下自动更新我的文本文件?

4 个答案:

答案 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)

但你必须打开文件本身,然后在写完后关闭它。