Java:递归写入文件

时间:2013-11-12 20:16:45

标签: java recursion

好的,这是我的情况:

我有一个递归函数,它正在计算和打印一些东西到屏幕上。现在我需要输出到文件。

所以我这样做了:

public void recursiveFn(int value) throws FileNotFoundException {
     recursiveFn(a);
     PrintWriter fileOP = new PrintWriter("file.txt")
     fileOp.printf(somevaluefromthisfunction)
}

这种方法的问题是,每次以递归方式调用该函数时,都会创建一个新文件,并删除所有先前的递归调用数据。

现在我的方法是让文件在此函数之外创建通缩。这就是我所做的:

public class MyClass {
      PrintWriter fileOP = new PrintWriter("file.txt") //line 2

      public void recursiveFn(int value) {
         recursiveFn(a);
         fileOp.printf(somevaluefromthisfunction)
    }
}

这个问题?我收到此错误:第2行出现“未处理的异常类型FileNotFoundException”。在调试此错误的过程中,我的头发损失了近5%!

2 个答案:

答案 0 :(得分:2)

问题是您的变量初始化可能会抛出您必须处理的异常。其他人已经展示了一些不同的方法来处理这个问题最好的,IMO,有一个方法可以设置递归方法所需的一切(比如PrintWriter),然后调用递归方法。

public class MyClass {
    public void doSomething(int value) {
        PrintWriter fileOP = new PrintWriter("file.txt");
        this.recursiveFn(value,fileOP);
    }
    public void recursiveFn(int value,PrintWriter fileOp) {
         int a = value + 1; // Or whatever
         recursiveFn(a,fileOp);
         fileOp.printf(somevaluefromthisfunction);
    }
}

答案 1 :(得分:0)

在构造函数中设置fileOP:

public class MyClass {
      PrintWriter fileOP; //line 2

      public void recursiveFn(int value) {
         recursiveFn(a);
         fileOp.printf(somevaluefromthisfunction)
    }
    public MyClass(){
         try{
             fileOP = new PrintWriter("file.txt");
         } catch (FileNotFoundException e){
             // do whatever you need to do to handle it
         }

    }
}

您还可以在递归定义中传递printwriter:

public void recursiveFn(PrintWriter fOP, int a) throws FileNotFoundException {
    recursiveFn(fOP, a);

    fOP.printf(someFunc(a));
}

我猜你想要将函数的递归调整为逻辑而不是无限。