2014-11-24 68 views
2

我有一個存儲測試問題的文件。如果名稱存在,則創建並增加文件名

"Test.ser" 

我希望能夠用同樣的名稱創建文件,但也有一些增量器附加每次有人需要測試存儲答案。

"Test1.ser" 
"Test2.ser" 
    ... 

但是,我想不出一種方法來實現這一點。一個計數器可以工作,但如果有人重新運行程序,計數器會重置。

有沒有人有一個想法這是可能的?非常感謝!

編輯:

int count = 1; 
while (searching) { 
    fileName = survey.name + Integer.toString(count) + ".ser"; 
    f = new File(fileName); 

    if(f.exists()) { 
     count++; 
    } else { 
     searching = false; 
    } 
} // Proceed to use file name 

不能讓它就增加近file_name1.ser

+2

不斷遞增的計數器,並試圖名,直到文件名不存在。 – 2014-11-24 00:55:10

+0

@JasonC謝謝傑森,我沒有想到這一點。我會嘗試使用這種方法! – Brejuro 2014-11-24 00:56:10

+0

類文件有一個exists()方法。只需創建一個文件名序列,直到找到一個未使用的文件名爲止。 – antonpp 2014-11-24 00:56:55

回答

4

我建議你使用String.format(String, Object...)File.exists()和類似

public static void main(String[] args) { 
    String fmt = "Test%02d.ser"; 
    File f = null; 
    for (int i = 1; i < 100; i++) { 
     f = new File(String.format(fmt, i)); 
     if (!f.exists()) { 
      break; 
     } 
    } 
    try { 
     System.out.println(f.getCanonicalPath()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

編輯

正如在評論中指出的,這隻能重試100次。如果你想支持100多個重試,你可以寫for循環一樣,

for (int i = 1;; i++) 
+0

如果存在100個文件,這將引發NPE。可能不理想的行爲。 – 2014-11-24 01:03:10

+0

@JasonC我認爲如果100次測試失敗,它會失敗很快,我不認爲101st會幫忙。 – 2014-11-24 01:06:35

+0

我的意思是它應該可能會失敗,比NPE更具信息性。 (「不可取」是指拋出NPE,而不是在100個文件後失敗,對不起) – 2014-11-24 01:07:00

2

一個簡單的方法來解決這個問題將被追加的日期和時間的文件名。

例如使用格式(年月日 - HHMM):

Test-20141122_2058.ser 
Test-20141123_1931.ser 
Test-20141123_2157.ser 
+2

此外:考慮在末尾添加秒或隨機字符串(或甚至例如進程或線程ID),如果多個用戶可以立即進行此測試,或者如果測試可以在60秒內完成。 – 2014-11-24 01:08:51

+0

這種方法很好地創建文件,但是在讀取文件時不太實際。 – 2017-01-11 13:22:00

+0

爲什麼不呢?你可以用正則表達式來獲取名字,這很快。 也許我應該在日期和時間之前添加answersId,並且您可以通過answersId輕鬆讀取文件。 – sebadagostino 2017-01-12 14:21:19

相關問題