0

我需要一些帮助,请将输出写入文件,但我无法让它工作。如果我使用 System.out.println 它可以工作。如果我在实际方法中创建文件流和缓冲写入器,它会创建文件但不会向其中写入任何内容。我假设这是因为我的方法是递归的,并且每次该方法再次调用它时都会创建一个新文件。所以我创建了另一个打印方法并使用字符串值 key[i] 作为字符串参数,它什么也不做。

任何帮助表示赞赏,谢谢。

 public void print(String s)throws IOException
{
    fstream = new FileWriter("out.txt", true);
    out = new BufferedWriter(fstream);

    try{
        out.write("From print: " + s + " ");
        out.close();
    }catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
}

public void generate() throws IOException
{ 
    while (k<randomWordNum())
    {
        if (randomNum() <= sumOfFreq[0])
        {
            //System.out.println(getKey[0] + " "); 
            print(getKey[i]);
            i++;
            k++;
            generate();
        }
        if (randomNum() >= sumOfFreq[i] && randomNum() <= sumOfFreq[i+1])
        {
            //System.out.println("From generate: " + getKey[i+1] + " "); 
            print(getKey[i+1]);
            i++;
            k++;
            generate();
        }
        else
        {
            i++;
            generate();
        }
    }//while
}//generate
4

2 回答 2

3

您需要 .close 文件以确保写入内容

于 2012-12-09T18:35:36.450 回答
1

我认为构造函数FileWriter会覆盖文件。所以你需要使用这样的代码行:

fstream = new FileWriter("out.txt", true); // true for appending

此外,始终在文件超出范围之前关闭文件,否则如果你不走运,它可能永远不会被刷新或关闭......

还有一件事,假设这不是某种调试/故障排除代码,“从不” catch Exception。如果您确实抓住了它,请务必在登录后重新扔掉它或您对它做了什么。但是,一般来说,总是捕获更具体的异常类型。

于 2012-12-09T18:49:35.013 回答