2011-03-22 65 views
1

所以我正在開發一個項目,我們在Java中創建了一個監督學習者。它使用一個約15行(每行一個數字)的weight .txt文件,每次運行打開並關閉兩次。打開和關閉直接發生在閱讀/寫作之前和之後。在Java學習者培訓上隨機刪除文本文件

由於代碼結構化(而不是我們的決定),我無法在循環中運行我們的訓練代碼。所以我設置了一個批處理腳本,它只是遍歷一個循環,在每次迭代運行我們的代碼(並因此更新我們的文件)期間,等待幾秒鐘,然後重複。

問題是每隔幾百個隨機運行,我們文件的所有內容都會被刪除。該文件仍然存在,但所有內容都很清晰。有時會在第100次運行中發生,有時會在第200次發生,有時會在第3次發生。

假設這不是我們的問題,那可能是什麼原因造成的?或者可能的修復?

規格:
Windows 7的
製作的Java「調用從.bat批處理文件來執行的.class文件
修改在同一目錄

.txt文件任何幫助是極大的讚賞。

+0

假設它不是你的代碼,問題就會使這個問題題外話;我在猜測吞下的異常和/或過早的close()。 – trashgod 2011-03-22 02:14:34

+0

事實上,它發生得如此零星,沒有抱怨就結束了,這讓我覺得這不是java。因爲我不知道它是否涉及我們運行腳本的方式,或者運行jvm的方式,所以我認爲它仍然是與編程相關的。 – prelic 2011-03-22 02:19:57

+0

你能發佈代碼嗎? – 2011-03-22 06:00:35

回答

1

事實上,它發生得如此零星而且沒有抱怨就結束了,這讓我覺得它不是java。

我不認爲你排除了你的代碼作爲問題的根源。作爲一個反例,這個Java程序大約三次中的一次「偶爾地」和「沒有抱怨地結束」。這是吞噬異常的本質。我在這裏討論的可能性:這可能是你的代碼。

public class SilentSpring { 
    /** Expected output: args[0] 0 */ 
    public static void main(String[] args) { 
     try { 
      long i = System.currentTimeMillis() % 3; 
      System.out.print(args[0] + " "); 
      System.out.println(0/i); 
     } catch (Exception e) {} 
    } 
} 

shell腳本:

for ((i = 1; i <= 32; i++)); do java -cp build/classes SilentSpring $i ; done 

控制檯:

 
1 0 
2 3 0 
4 5 6 0 
7 0 
8 0 
9 0 
10 0 
11 0 
12 0 
13 14 15 0 
16 0 
17 18 0 
19 0 
20 0 
21 22 0 
23 24 0 
25 26 0 
27 0 
28 0 
29 0 
30 31 0 
32 0 
+0

感謝這個例子,我會檢查一下,以確保我沒有吞下任何異常或破壞鏈條。在你發佈的例子中,原因是什麼?除了試圖儘可能優雅地失敗之外,還有其他解決方案嗎? – prelic 2011-03-24 04:39:53

+0

它(靜靜地)拋出[ArithmeticException](http://download.oracle.com/javase/6/docs/api/java/lang/ArithmeticException.html)。如果在打開文件之後發生這種情況,但在寫入之前,文件將被(無聲)截斷。至少,'printStackTrace(System.err)',但[Logger](http://download.oracle.com/javase/6/docs/technotes/guides/logging/overview.html)更好。 – trashgod 2011-03-24 06:49:52