Java로 텍스트 파일 읽기

버퍼 방식으로 사용하여 빠르게 텍스트 파일을 읽는 예제 코드입니다. 제가 Java 아재라서, 새로운 Java의 더욱 효과적인 파일 읽기 API가 분명 있을것 같은데.. 혹 있다면 추천 부탁드리겠습니다.

package tst;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class MainEntry {
	public static void main(String[] args) {
		String filePath = "D:\\__Data__\\DXF\\1_5000\\NGII_DTM_5000_울산_남구_35905\\35905090.dxf";

		FileInputStream fs = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		
		try {
			long startTime = System.currentTimeMillis();
			
			fs = new FileInputStream(filePath);
			isr = new InputStreamReader(fs, "euc-kr");
			br = new BufferedReader(isr);
			
			String line = null;
			while((line = br.readLine()) != null) {
				//System.out.println(line);
			}
			
			long finishTime = System.currentTimeMillis();
			System.out.println("소요시간: " + (finishTime - startTime) + " ms");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(br != null) br.close();
				if(isr != null) isr.close();
				if(fs != null) fs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

위의 코드로 7.52MB 크기의 파일을 모두 읽는데, 약 0.13초정도 소요됩니다. 사용하고 있는 개발 환경은 i7-6700HQ@2.60GHz의 RAM 16GB 노트북입니다.

vi 편집기 명령 정리

이 글은 콘솔 환경에서 텍스트를 편집할 수 있는 vi 편집기 사용을 위해 요약한 글로 vi를 처음 접하는 분들은 다른 글을 참조하시기 바랍니다.

vi는 총 4가지 상태를 가지며 다음과 같은 상태 전환이 이루어집니다.

EX 모드

  • 변경된 내용 저장 w
  • 변경된 내용 저장하고 종료 wq
  • 변경된 내용 무시하고 종료 q!
  • 종료 q
  • 문자열 검색(예: boy) /boy
    • 다음 검색 문자열 n
    • 이전 검색 문자열 N
  • 문자열 변경(예: boy를 guy로 변경) %s/boy/guy/ig
  • 줄 번호 표시 set nu
  • 줄 번호 감추기 set nonu

명령 모드

  • 현재 커서 위치에서 편집 모드로 전환 i
  • 현재 커서 위치 줄의 첫문자 위치에서 편집 모드로 전환 I
  • 현재 커서의 바로 뒤에서 편집 모드로 전환 a
  • 현재 커서 위치 줄의 마지막 위치에서 편집 모드로 전환 A
  • 왼쪽으로 커서 위치 이동 h, ←
  • 오른쪽으로 커서 위치 이동 l, →
  • 위쪽으로 커서 위치 이동 k, ↑
  • 아래쪽으로 커서 위치 이동 j, ↓
  • 다음 단어 단위로 커서 이동 w
  • 이전 단어 단위로 커서 이동 b
  • 커서 위치 라인의 첫 문자로 이동 ^, 0
  • 커서 위치 라인의 끝 문자로 이동 $
  • 마지막 라인으로 이동 G
  • 100번째(1부터 시작) 라인으로 이동 100G
  • 편집된 내용 되돌리기 u
  • 커서 위치 한글자 삭제 x
  • 커서 위치를 포함해 세 글자 삭제 3x
  • 커서 앞의 글자 삭제 X
  • 커서 위치의 단어 단위로 삭제 dw
  • 커서 위치 줄 삭제 dd
  • 커서 위치의 줄을 포함해 세 줄 삭제 3dd
  • 커서 앞의 글자 삭제 X
  • 커서 위치에서 줄 끝 문자까지 삭제 D
  • 커서 위치의 줄을 버퍼에 복사 yy
  • 커서 위치의 줄을 포함해 세 줄을 버퍼에 복사 3yy
  • 버퍼에 복사된 문자열을 커서 위치에 붙여넣기 p
  • 버퍼에 복사된 문자열을 커서의 앞 위치에 붙여넣기 P
  • 한 글자만 수정 r
  • 커서 다음 위치에 빈줄 추가 o
  • 커서 이전 위치에 빈줄 추가 O
  • 커서 위치의 라인과 다음 라인을 한 라인으로 붙임 J

비주얼 모드

  • 글자 단위로 선택(명령모드에서 전환시) v
  • 라인 단위로 선택(명령모드에서 전환시) V
  • 블럭 단위로 선택(명령모드에서 전환시) ^v
  • 선택된 텍스트를 버퍼에 복사 y
  • 선택된 텍스트를 삭제 d, x