我有以下代码部分
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;
}
}
我希望能够连续写两个文件,但是在我只写了一个文件之后我的代码就停止工作了。我已经检查过,我的代码确实写了第一个文件,但是没有写第二个文件。我不知道为什么。我如何解决这个问题,以便我可以写两个文件?
答案 0 :(得分:1)
您可能需要为每种类型的作者而不是Factory Pattern
考虑Singleton
,或者尝试为每个文件设置两个bw
。
答案 1 :(得分:0)
关闭&#34;单身&#34; BufferedWritter
,你永远不会打开另一个。简而言之,您永远不会打开多个文件来写。
要清楚,第一个getBufferedWritter
之后的每个调用都会忽略它的参数并返回用于编写第一个文件的BufferedWritter
,并且已经关闭 - 假设br
和bw
是相同的变量,并且两个中的一个未在您的问题中未显示的范围中声明...
答案 2 :(得分:0)
假设在你的单身人士中,你的变量到处都是bw(不确定是什么是br),当你写下你的seconde文件时,你不会用METAMORPH_ENG_TXT_FMT重新创建Bufferwritter。
因此它会被刷新并关闭,因此您的下一次迭代将无法正常工作