递归写入后关闭文件

时间:2014-05-26 19:11:35

标签: java file recursion

我不知道为什么我的代码第一次只在文件中写入然后什么也没有,我认为问题是salida.close(),但我不确定。一点帮助将不胜感激。该方法本身将二叉树保存在文件中。如果您需要更多信息,请问我。这是我的代码:

public boolean guardarAgenda() throws IOException
{
    NodoAgenda raiz;
    raiz = this.root;
    guardar(raiz);
    if(this.numNodes == 0)
        return true;
    else return false;

}
public void guardar(NodoAgenda nodo) throws IOException 
{
    FileWriter fich_s = new FileWriter("archivo.txt");
    BufferedWriter be = new BufferedWriter(fich_s);
    PrintWriter output = new PrintWriter(be);
    Parser p = new Parser();
    if (nodo != null)
    {
        guardar(nodo.left);
        p.ponerPersona(nodo.info);
        String linea = p.obtainLine();
        salida.println(linea);
        guardar(nodo.right);
        this.numNodes--;
    }

        output.close();

}

1 个答案:

答案 0 :(得分:1)

您在多个通话中打开相同的文件,甚至没有appending content选项。所以难怪你在处理结束后没有找到你期望的东西。

当使用递归并在每次调用时使用相同的资源时,最好有第二个方法将该结果作为参数,并且只进行写入/添加,打开/实例化应该在启动第一次打电话,类似于此:

public void guardar(NodoAgenda nodo) throws IOException 
{
    FileWriter fich_s = new FileWriter("archivo.txt");
    BufferedWriter be = new BufferedWriter(fich_s);
    PrintWriter salida = new PrintWriter(be);
    if (nodo != null)
    {
        guardar(nodo.left, salida);
    }
    output.close();
}


public void guardar(NodoAgenda nodo, PrintWriter salida) throws IOException 
{
    if (nodo != null)
    {
        Parser p = new Parser();
        guardar(nodo.left);
        p.ponerPersona(nodo.info);
        String linea = p.obtainLine();
        salida.println(linea);
        guardar(nodo.right, salida);
        this.numNodes--;
    }
}