2011-03-22 68 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