텍스트 파일이 있습니다. 한 줄에서 다른 줄로 내용을 검색하고 싶습니다. 예를 들어, 파일은 200K 회선 일 수 있습니다. 저는 78 행에서 2735 행까지 내용을 읽길 원합니다. 파일이 매우 클 수 있기 때문에 전체 내용을 메모리로 읽어 들이고 싶지는 않습니다.자바에서 텍스트 파일을 읽으십시오.
2
A
답변
0
다음은 가능한 해결책의 시작입니다. 따라서 파일의 마지막 줄을 읽으려면 이전 줄을 모두 읽을 필요가 없습니다. 그 줄로 건너 뛸 수 있습니다.
0
먼저 줄 단위로 줄 번호를 세고 언급 한 줄 위치에서 필요한 내용을 가져 오기 시작하십시오.
11
BufferedReader.readLine()을 사용하고 행을 계산하십시오. 버퍼 크기와 현재 줄만 메모리에 유지합니다.
아니요, 모든 파일의 크기가 고정되어 있지 않다면 그 시점까지 전체 파일을 읽지 않고 3412 행에 도달 할 수 없습니다.
public static List<String> linesFromTo(int from, int to, String fileName)
throws FileNotFoundException, IllegalArgumentException {
return linesFromTo(from, to, fileName, "UTF-8");
}
public static List<String> linesFromTo(int from, int to, String fileName, String charsetName)
throws FileNotFoundException, IllegalArgumentException {
if(from > to) {
throw new IllegalArgumentException("'from' > 'to'");
}
if(from < 1 || to < 1) {
throw new IllegalArgumentException("'from' or 'to' is negative");
}
List<String> lines = new ArrayList<String>();
Scanner scan = new Scanner(new File(fileName), charsetName);
int lineNumber = 0;
while(scan.hasNextLine() && lineNumber < to) {
lineNumber++;
String line = scan.nextLine();
if(lineNumber < from) continue;
lines.add(line);
}
if(lineNumber != to) {
throw new IllegalArgumentException(fileName+" does not have "+to+" lines");
}
return lines;
}
0
나는 RandomAccessFile의를 사용하는 것이 좋습니다 것,이 클래스를 사용하면 파일의 특정 위치로 이동 할 수 있습니다 :
+1
바이트 인덱스와 행 번호 사이에 고정 된 관계가 없기 때문에이 방법은 도움이되지 않습니다. 선은 원하는만큼 길거나 짧을 수 있으므로 한 번 끝나면 데이터를 읽어야합니다. 마지막 행을 읽는 것이이 방법으로 향상 될 수 있지만 (일반적으로 파일에 큰 행이 하나만있는 경우는 제외) 일반적으로 도움이되지 않습니다. –
관련 문제
- 1. 자바에서 이진 모드로 url을 읽으십시오.
- 2. 자바에서 오류 대화 상자를 읽으십시오.
- 3. index.dat 파일을 읽으십시오. C#
- 4. 스트레이트 HTML 파일을 읽으십시오
- 5. 바이너리 파일을 뒤로 읽으십시오.
- 6. 자바에서 텍스트 파일을 읽고 문자열에게 그것을
- 7. 객관적인 c : csv 파일을 읽으십시오
- 8. 파일을 coldfusion에서 다운로드하고 내용을 읽으십시오.
- 9. 원본 내용의 PDF 파일을 읽으십시오
- 10. 자바에서 텍스트 파일 읽기
- 11. 자바에서 .txt 파일을 편집하는 방법
- 12. 자바에서 텍스트 스크롤
- 13. 파이썬에서 다중 계층 CSV 파일을 읽으십시오.
- 14. 시각 장애인을위한 웹 사이트의 텍스트 내용을 읽으십시오
- 15. 자바에서 DBF 파일을 쿼리하는 방법
- 16. 파일을 만들고 자바에서 삭제하십시오
- 17. 자바에서 파일을 읽고 쓰자.
- 18. Android : ASSETS 폴더의 GZIP 파일을 읽으십시오.
- 19. 텍스트와 그림이 포함 된 단어 파일을 읽으십시오.
- 20. Perl : Java .jar 파일에서 MANIFEST.MF 파일을 읽으십시오.
- 21. 최신 파일을 선택하고 getline을 사용하여 읽으십시오.
- 22. IOS : 앱을 실행할 때 txt 파일을 읽으십시오.
- 23. jar/war 파일의 maven.properties 파일을 읽으십시오.
- 24. 는 자바에서 고정 된 형식의 텍스트 파일을 구문 분석
- 25. 자바에서 2 차원 배열로 텍스트 파일을 인쇄하는 방법은 무엇입니까?
- 26. 자바에서 텍스트 파일을 단일 단위로 표현하고 텍스트에서 일치하는 문자열
- 27. 자바에서 옵션 텍스트 값 받기
- 28. 자바에서 이미지 파일을 업로드하는 방법
- 29. 자바에서 이미지 파일을 읽는 중
- 30. 자바에서 xml 파일을 읽는 것
'//assume '을'assert'로 바꾸고 끝에'; '를 추가하십시오. –
또한, (틀림없이) 더 간단한'BufferedReader' 대신에 스캐너를 사용할 이유가 있습니까? 또한 파일에서 읽는 문자 인코딩 사용을 지정하지 않으므로 운이 좋으면 그 부분을 남겨 두게됩니다. –
@ Joachim, 좋은 지적, 나는 나의 대답을 편집했다! 'BufferedReader'에 관해서, 나는 그렇게 많이 중요하지 않다고 생각한다. 나는 틀린가? –