如何在Java中连续编写多个文件

时间:2014-01-15 23:54:02

标签: java file-io

我有以下代码部分

fileHelper.writeFile(firstPage, Constants.METAMORPH_ENG_TXT);
ArrayList<String> list = textTokenizer.tokenize(firstPage, Locale.US);
list = textTokenizer.replaceNewLines(list);
fileHelper.writeFile(list, Constants.METAMORPH_ENG_TXT_FMT);

将此作为我的writeFile方法

public void writeFile(ArrayList<String> linesToWrite, String nameOfFile)
{
    BufferedWriter bw = SingletonBufferedWritter.getBufferedWritter(nameOfFile);

    for(String s: linesToWrite)
    {
        try
        {
            bw.write(s);
            bw.newLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    try
    {
        bw.flush();
        bw.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

这是我的SingletonBufferedWritter

public class SingletonBufferedWritter 
{

    private static BufferedWritter bw = null;

    public static BufferedWritter getBufferedWritter(String nameOfFile)
    {
        if(bw == null)
        {
            try
            {
                bw = new BufferedWritter(new FileReader(nameOfFile));
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }

        return bw;
    }
}

我希望能够连续写两个文件,但是在我只写了一个文件之后我的代码就停止工作了。我已经检查过,我的代码确实写了第一个文件,但是没有写第二个文件。我不知道为什么。我如何解决这个问题,以便我可以写两个文件?

3 个答案:

答案 0 :(得分:1)

您可能需要为每种类型的作者而不是Factory Pattern考虑Singleton,或者尝试为每个文件设置两个bw

答案 1 :(得分:0)

关闭&#34;单身&#34; BufferedWritter,你永远不会打开另一个。简而言之,您永远不会打开多个文件来写。

要清楚,第一个getBufferedWritter之后的每个调用都会忽略它的参数并返回用于编写第一个文件的BufferedWritter,并且已经关闭 - 假设brbw是相同的变量,并且两个中的一个未在您的问题中未显示的范围中声明...

答案 2 :(得分:0)

假设在你的单身人士中,你的变量到处都是bw(不确定是什么是br),当你写下你的seconde文件时,你不会用METAMORPH_ENG_TXT_FMT重新创建Bufferwritter。

因此它会被刷新并关闭,因此您的下一次迭代将无法正常工作