UTF-8 인코딩 된 텍스트가 포함 된 파일을 열고 싶습니다. 위치를 설정하고 25 줄을 읽을 수 있으며 위치를 가져올 수 있습니다.FileInputStream 및 BufferReader를 사용하여 RandomAccessFile의 seek() 및 getFilePointer()를 구현하는 방법은 무엇입니까?
불행히도 RandomAccessFile은 UTF-8 인코딩을 지원하지 않습니다. 그래서이 코드를 작성했습니다. 반환 된 오프셋 값을 갖는 getParsedLines() 메서드를 다음 25 행을 읽도록 재귀 호출하지만 처음 1-25 행을 인쇄 한 다음 349-373, 695-719 등을 인쇄합니다. 내가 마지막으로 내가 1-25, 26-50, 51-75를 인쇄 할 수 있습니다 올바른 오프셋 얻을 수있는 방법
public long getParsedLines(File file, long offset) {
int counter = 0;
FileInputStream fis = null;
InputStreamReader streamReader = null;
BufferedReader br = null;
try {
fis = new FileInputStream(file);
fis.getChannel().position(offset);
streamReader = new InputStreamReader(fis, "UTF8");
br = new BufferedReader(streamReader);
String str;
while (counter <= 24) {
if ((str = br.readLine()) != null) {
System.out.println(str);
} else {
offset = -1;
break;
}
counter++;
}
if (fis != null) {
offset = fis.getChannel().position();
}
} catch (IOException ex) {
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException ex) {
}
}
return offset;
}
. 76-100 등.
예 .. 일부 이전 버전과의 호환성을 위해 필자는 readLine()을 사용하여 텍스트 파일을 "한 줄씩"읽어야하며 전체 텍스트가 아닌 한 번에 25-25 줄만 읽어야한다는 제약이 있습니다.
RandomAccessFile은 UTF-8을 지원하지 않습니다. –
@Rocky utf-8 데이터가 포함 된 파일을 읽는 메커니즘이 없습니다. –
readUTF() 및 writeUTF() 메서드가 없습니다? –