0

配列要素をテキスト ファイルにコピーするこのコードがあり、ファイルをコピーした後、i-copyed ファイルを開くボタンがあります。

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

4 に答える 4

3

実際に作成できますPrintWriter with autoFlush turned on

print = new PrintWriter(new FileOutputStream
   ("C:\\Users\\Jofrank\\workspace\\Java\\src\\payroll\\report.txt"), true);

ここで 2 番目のパラメーターはtrueです。Javadocに従って:

autoFlush - A boolean; if true, the println, printf, or format methods will flush the output buffer

于 2013-10-02T17:19:30.150 に答える
0

それはシステムに大きく依存します。flush() は通常動作するはずですが、これはすべて保証されているわけではありません。同期を呼び出す可能性のある埋め込みフラッシュ ファイル システムもいくつかあります。

しかし、最初のアプローチは試してみてくださいflush()

于 2013-10-02T17:19:23.753 に答える
0

ファイルに書き込むには、ストリームを空にする必要があります。他の人が示唆しているように、ストリームを使用.flush()せずにこれを達成するために使用してください。.close()それ以外の場合は、ストリームが空になり、コンテンツがディスクまたは指示している場所に書き込まれていることを確認するように.close()自動的に求められると思います。.flush()

于 2013-10-02T17:19:37.873 に答える