我正在开发一个程序,需要更新一行,该行的值取决于读取后的行的结果。我认为我可以在Java中使用两个BufferedReaders来定位读取器在线上进行更新,而另一个用于修复该值的行(它可以是前面未知的行数)。这里的问题是我在同一个文件上使用了两个BufferedReaders,即使我认为我正在使用索引,调试中的结果似乎也不可靠。 这是代码:
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();
}
提前致谢。
答案 0 :(得分:2)
好吧,BufferedReader只读取内容,它没有能力将数据写回。因此,您需要的是一个BufferedReader来获取内容,以及一个BufferedWriter,它从BufferedReader获取所有输入,并将其输出到临时文件,并带有更正/附加的数据。
然后,当您完成时(即BufferedReader和BufferedWriter流都已关闭),您需要丢弃原始文件,或者将临时文件重命名为原始文件的名称。
您基本上是将原始文件复制到临时文件,在临时文件的输出中修改有问题的行,然后在原始文件上复制/重命名临时文件。
答案 1 :(得分:0)
好的,我在你的代码中看到了一些问题 - >
recordType=lineC.substring(0,3);//Gets current Record Type
if (recordType.equals("35")){
如果你在第一行看到,你将recordType的子字符串变为recordType。现在recordType长度为3.如果RecordType只有2个字符,则substring抛出arrayIndexOutOfBoundsException。因此,当没有运行时异常时,它的长度为3,并且在下一行中,您调用的是具有2个字符的字符串的equals方法。
这个if块会不会运行?