FileReader, BufferedReader를 이용해 외부 txt 파일로부터 모든 문장을 읽어와
StringTokenizer로 모든 문장을 라인 단위("\n" 기준)로 쪼개어, 그 쪼갠 문장 하나 하나를 String 배열에 쌓은 후
외부 txt 파일 모든 문장 중 마지막 5줄(끝에서 5줄)만 출력하고자 짜 본 코드입니다.
그런데, 당연하겠지만 다른 String 데이터의 StringTokenizer를 이용할 때는 아무 탈 없이 실행되는데
BufferedReader로 txt 파일의 모든 문장을 저장한 String 변수인 line에서 StringTokenizer를 사용하면 예외가 발생해서,
왜 이런 건지 이유라도 알고 싶어서 글을 써 봅니다. ㅠㅠ
전체 코드와, 발생한 예외 첨부하겠습니다. 미리 감사하다는 말씀 드립니다!
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
/**
* Created by son-wonhui on 2017. 6. 6..
*/
//파일을 읽어서 마지막 다섯 줄만 표준 출력으로 출력하는 프로그램을 작성한다.
public class FileInputTest {
public static void main(String[] args) {
BufferedReader bReader = null;
int numOfLine = 0;
String line = null;
int count = 0;
String[] los = null;
StringTokenizer st;
try {
bReader = new BufferedReader(new FileReader("src/InputTest.txt"));
while((line = bReader.readLine()) != null) {
System.out.println(line);
if(line.matches(".*\n*.")) {
//Line 수 계산
numOfLine++;
}
}
System.out.println("numOfLine : " + numOfLine);
//문자열 분리 후 배열에 삽입
st = new StringTokenizer(line, "\n");
while(st.hasMoreTokens()) {
los = new String[numOfLine];
los[count] = st.nextToken();
count++;
}
count = numOfLine - 5;
//마지막 5줄을 콘솔에 출력
while(count < numOfLine) {
System.out.println(los[count]);
count++;
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
bReader.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
java.lang.NullPointerException at java.util.StringTokenizer.<init>(StringTokenizer.java:199) at java.util.StringTokenizer.<init>(StringTokenizer.java:221) at FileInputTest.main(FileInputTest.java:38) : st = new StringTokenizer(line, "\n"); 부분입니다.