BufferedReader template = new BufferedReader(new FileReader("<InputFile>"));
PrintWriter itemList = new PrintWriter(new FileWriter("<OutputFile>"));
Iterator<String> iterator = allProduct.iterator();
while(iterator.hasNext()){
String l;
while((l = template.readLine()) != null){
if(l.contains("~")==false)
itemList.print(l);
else
itemList.print(l.replace("~", iterator.next()));
}
}
template.close();
itemList.close();
但是编程没有终止,也没有产生任何错误,它基本上被绞死了。
答案 0 :(得分:0)
当您到达模板文件的末尾时,template.readLine()
会一直返回null
,因此您不会进入内部while
循环,因此iterator
不会提前。
您的代码将与此相同:
while(iterator.hasNext()){
String l;
// This bit commented out because template.readLine() always returns null
//while((l = template.readLine()) != null){
// if(l.contains("~")==false)
// itemList.print(l);
// else
// itemList.print(l.replace("~", iterator.next()));
//}
}
解决方案要么关闭然后重新打开文件(根本不好),要么将两者分开:首先逐行读取模板到列表中,然后只遍历列表。
我只是猜测,但你可能不希望每次遇到iterator.next()
时都打电话给~
,所以我认为你需要这样的事情:
BufferedReader template = new BufferedReader(new FileReader("<InputFile>"));
ArrayList<String> templateLines = new ArrayList<String>(); //this is where we store the lines from the template
String l;
while((l = template.readLine()) != null){ //read template lines
templateLines.add( l ); //add to list
}
template.close(); //done
PrintWriter itemList = new PrintWriter(new FileWriter("<OutputFile>")); //now let's look at the output
Iterator<String> iterator = allProduct.iterator();
while(iterator.hasNext()){
String product = iterator.next(); //take one product at a time
for( String templateLine : templateLines ) { //for each line in the template
if(templateLine.contains("~")==false) //replace ~ with the current product
itemList.print(templateLine);
else
itemList.print(templateLine.replace("~", product));
}
}
itemList.close();