2017-10-12 70 views
0

我想知道如何讓程序在每次運行時輸出一個新的文本文件。例如首先運行machineslot(1).txt,第二次運行machineslot(2).txt,等等。或者,在製作文件時使輸出文件包含。每次我的程序運行時,如何輸出新的文本文件?

File file = new File("MachineSlot.Txt"); 

    try(PrintWriter out = new PrintWriter(new FileWriter(file));) { 

     for (int i = 0; i < winData.length; i++){ 

      if (winData[i][0] != 0.0) { 

      out.printf("You won Machine %.0f. You won $%.2f. You have %.0f quarters which equals $%.2f %n", winData[i][0], winData[i][1], winData[i][2], winData[i][3]); 

      } 
     } 

     for (int k = 0; k < plays.length; k++) 
      out.println("You were able to play machine " + (k + 1) +" a total of "+ plays[k] + " times."); 
    }//end of try.  

    catch(IOException error){ 
     System.out.println("Could not use the IO file"); 
    }//End catch 
+0

爲什麼你需要PrintWriter? – Lokesh

+0

如果循環再次運行,你還想寫一個不同的文件嗎?或附加在現有的文件? – Lokesh

回答

2

我的解決方法是使用文件名,並添加時間戳它。

File file = new File("MachineSlot_" + System.currentTimeMillis() + ".txt"); 

通常來說,任何生成的兩個文件都會有不同的文件生成時間戳。避免對現有文件進行多重檢查。

其他添加有一個格式化的日期。

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SS"); 
File file = new File("MachineSlot_" + formatter.format(new Date()) + ".txt"); 
+0

偉大的這應該是解決方案。根據Jerry06的寫法,它具有複雜性。假設有100個文件,所以循環將運行100次以生成新文件 – Lokesh

+1

是的,這一直都是有效的,你會注意到當我們重複生成日誌/文件時,這會被使用很多次。 – Acewin

+0

@ Jerry06解決方案中最糟糕的部分是每次生成新文件時,時間複雜度都會不斷增加 – Lokesh

1

您可以PrintWriter代碼之前嘗試這個

File file; 
int i = 0; 
do{ 
    file = new File(String.format("MachineSlot(%d).Txt", i++)); 
} 
while (file.exists()); 
+0

它是否滿意**每次運行時新的文本文件** !!!? – 2017-10-12 03:37:49

+1

這是做什麼是它添加一個數字到文件名。它會一直遞增,直到你得到一個不存在的編號的文件爲止。 – Acewin

+0

@ Jerry06太棒了! – 2017-10-12 03:45:45

0

根據您的問題,最好的方式來增加日期和時間與您的文件名

String date = new SimpleDateFormat("yyyMMddHHmmssSS").format(new Date()); 

這裏當前日期轉換爲特定的格式,那麼文件名應爲

File file = new File("MachineSlot" + date + ".txt"); 

輸出看起來像(文件名) -

MachineSlot20171012094424.txt

相關問題