在将输出数据写入TXT文件的同时循环主方法

时间:2018-07-13 04:12:38

标签: java genetic-algorithm fileoutputstream filewriter

所以,我正在研究一个与遗传算法有关的Java项目。

我有一个main方法,该方法调用一个函数(称为函数1),该函数一直进行计算直到指定的迭代为止。我想运行main方法100次并收集数据,所以我决定在main方法中调用的函数1中使用FileWriter。

    public static int Runcnt = 0;
    static int o = 0;
    public static File statText = new File("C:\\Users\\ShadyAF\\Desktop\\StatTest.txt");
    public static void main(String [] args){
    while(Runcnt <= 100)
    {
        final long startTime = System.nanoTime();
        MainAlgorithm mA = new MainAlgorithm("config.xml");
        mA.cMA();
        final long duration = System.nanoTime() - startTime;
        System.out.println(duration/1000000000 + " seconds");
        o = 0;
    }

上面的代码片段是我试图循环的主要内容。 (功能1)

    System.out.println("best = "+Main.indx+"   = "+Main.val);
    System.out.println("max_cnt: " + Main.max_cnt);

    try {
          FileOutputStream is = new FileOutputStream(Main.statText);
          OutputStreamWriter osw = new OutputStreamWriter(is);    
          Writer w = new BufferedWriter(osw);
          w.write("#" + Main.Runcnt + " Best#: " + Main.indx + " BestScore: " + Main.val + " MaxCnt: " + Main.max_cnt + "\n");
          w.close();
        } catch (IOException e) {
            System.err.println("Problem writing to file.");
        }

上面的代码片段是主循环内的mA.cMa()函数。

我运行了一段时间的代码,看来程序仅在第一个循环中写入文件,而对其余的循环则不执行任何操作。

非常感谢您的帮助!

编辑:为什么我会被否决?至少留下有用的评论:/

1 个答案:

答案 0 :(得分:0)

您应该从头开始更改模式……无论如何,您都可以在Main中尝试类似的操作:

public static Path pathFile = Paths.get("C:\\Users\\..blah..\\stats.txt");

然后在循环中使用

try {
    String log = "#" + Main.Runcnt + " Best#: " + Main.indx + " BestScore: " + Main.val + " MaxCnt: " + Main.max_cnt + "\n";
    Files.write(Main.pathFile, log.getBytes(), Files.exists(Main.pathFile) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} catch (IOException e) {
    // exception handling 
}

效率不高,特别是在记录很多的情况下,但是您编写的整个代码也需要强大的重构:)