如何用Java连续编写多个文件

如何用Java连续编写多个文件,java,file-io,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

我有下面一段代码

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);
我希望能够连续编写两个文件,但在我只编写了一个文件之后,我的代码就停止工作了。我已经检查过了,我的代码确实写了第一个文件,但第二个文件写不出来。我不知道为什么。如何修复此问题以写入两个文件?

一旦关闭“singleton”
BufferedWriter
,就再也无法打开另一个文件了。简而言之,您永远不会打开多个要写入的文件


说清楚了,,第一次调用
getBufferedWriter
之后的每个调用都会忽略其参数,并返回用于写入第一个文件且已关闭的
BufferedWriter
——假设
br
bw
是相同的变量,并且这两个变量中的一个未在未显示在您的应用程序中的范围内声明问题…

假设在您的单例中,您的变量是bw everywhere(不确定什么是br),当您编写第二个文件时,您的BufferWriter将不会使用变质工程TXT FMT重新创建


所以它会被刷新和关闭,因此你的下一个迭代将不能工作

你可能需要为每种类型的作者考虑一个<代码>工厂模式< /代码>而不是<代码> SuntLoN>代码>或者尝试有两个<代码> BW < />每个文件一个。

我建议你使用一个调试器来跟踪你的代码并找出它在做什么。您的单例实现很差,这意味着您只有一个
BufferedWriter
。。。指向一个文件。@BrianRoach我应该如何实现我的singleton?我需要使我的应用程序多线程吗?我以前从未使用过多个线程。你能告诉我一些我能读到的东西的方向吗?你为什么要用单子呢?您在第一次方法调用后关闭了BufferedWriter,因此无法再次使用。抱歉,我将“Concertively”误读为“concurrence”。我是否错误地实现了singleton?此外,Java的缓冲编写器类没有“open”,但除非关闭缓冲编写器,否则无法编写文件。我应该不使用单件吗?其他人建议使用工厂模式。单例模式没有真正意义,因为您试图将其用于不同的文件(需要不同的编写器)。没有打开的、正确的-在关闭旧的写入程序时必须创建一个新的写入程序。如果没有重用
BufferedWriter
的方法,在使用singleton模式时尝试只分配一个写入程序是没有意义的。实际上也没有必要使用工厂模式。只要为每个文件创建一个新的
BufferedWriter
,如果这是
BufferedWriter
所需要的。
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();
    }
}
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;
    }
}