我正在处理一个程序,该程序需要更新一行取决于读取行后结果的值。我认为我可以在Java中使用两个BufferedReader来将读取器放在更新的行上,而另一个则用于修复该值的行(它可能是未知行数)。这里的问题是,我在同一个文件上使用了两个BufferedReader,即使我认为我正在处理索引,调试的结果似乎也不可靠。 代码如下:使用多个BufferedReader读取单个文件
String outFinal
FileName=fileOut;
File fileDest=new File(outFinalFileName);
try {
fout = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(fileDest)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
FileReader inputFile=null;
try {
inputFile = new FileReader(inFileName);
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
BufferedReader fin = new BufferedReader(inputFile);
BufferedReader finChecker = new BufferedReader(inputFile); //Checks the file and matches record to change
String line="";
String lineC="";
int lineNumber=0;
String recordType="";
String statusCode="";
try {
while ((lineC = finChecker.readLine()) != null) {
lineNumber++;
if (lineNumber==1)
line=fin.readLine();
recordType=lineC.substring(0,3);//Gets current Record Type
if (recordType.equals("35")){
while(!line.equals(lineC)){
line=fin.readLine();
if (line==null)
break;
fout.write(line);
}
}else if (recordType.equals("32")){
statusCode=lineC.substring(4,7);
if(statusCode.equals("XX")){
updateRecordLine(line,fout);
}
}
}
returnVal=true;
} catch (IOException e) {
e.printStackTrace();
}
在此先感谢。
不,它们是开放的,我可以在调试时看到。但是,我无法全部阅读并将其保存在内存中,因为这可能会使用大型文件。我的问题仍然是同步读取两个BufferedReaders。我看到它应该是同一行的不同结果。 – atzu
我不明白(1)为什么你需要两个BufferedReader,或者(2)为什么你不只是在阅读时将文件输出到临时文件(这意味着你不必保留整个文件文件在内存中,只是文件中的当前行 – jefflunt
因此,如果您正在读取文件,并且遇到需要更改其值的行,则根据行后的内容添加该行一个数组或其他东西,将其标记为“需要更改”,然后(使用相同的BufferedReader)读取下一行,计算更改并将更改的行写入临时文件,如果我正确理解问题,应该只需要一个BufferedReader,一个临时存储你将要更改的行,以及一个BufferedWriter,你能够做到这一点。你可以发布数据摘录,以便我们得到一个你正在制作什么样的数据变化的例子吗? – jefflunt