나는 읽는 행의 결과에 값을 의존하는 행을 업데이트해야하는 프로그램을 만들고 있습니다. 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
두 개의 BufferedReader가 필요한 이유 (1) 또는 (2) 파일을 읽는 동안 임시 파일에 파일을 출력하지 않는 이유 (전체를 유지할 필요가 없음) 파일을 메모리에 저장하고 파일의 현재 행 – jefflunt
파일을 읽었을 때 값이 변경되어야하는 행이 있으면 그 행에 따라 해당 행을 배열이나 뭔가 "변경 필요"로 표시 한 다음 (동일한 BufferedReader로) 다음 행을 읽고 변경 사항을 계산하고 변경된 행을 임시 파일에 기록합니다. 문제를 올바르게 이해하면 하나의 BufferedReader, 변경할 라인의 임시 저장소 및 하나의 BufferedWriter로이 작업을 수행 할 수 있습니다. 데이터의 발췌 부분을 게시하여 어떤 종류의 데이터 변경에 대한 예제를 얻을 수 있습니까? – jefflunt