- 핵심 개념 -
스페이스 , 탭문자 "," ":" ";" 등의 지정된 경계자로 나뉘어서 분리되어진 stream을 말한다.
예를 들어서 스트림이 111:222:333 이고 경계자 ':'에 의해 tokenize되었다면 111,222,333 의 각각의 항목이 한 토큰인것이다.
분리된 토큰값을 추출할여 가공해서 사용할때 유용하게 쓰인다.
프로그램적으로 csv파일을 읽어와 db 구축을 위해서 유용하게 사용된다.
아래에서는 사용하지 않았지만.보통 swich(tokens.ttype)를 사용하여
case StreamTokenizer.TT_WORD:
case StreamTokenizer.TT_NUMBER:
등으로 단어일때 숫자일때 나눠서 사용하는게 일반적이다.
왜냐하면..토큰의 필드값을 가져올때 sval과 nval을 사용하는데.. 만약 들어가있는 필드값이 맞지 않다면 null을 반환하게 된다.
import java.io.*;
import java.util.ArrayList;
public class test {
public static void main(String[] args) {
//저장할 ArrayList 선언 및 각 요소값 선언.
String name1,name2,name3,name4,name5;
ArrayList<infolist> arr = new ArrayList<infolist>();
//파일 에러 처리 try catch문,임의로 모든 exception으로 고침.
try {
//파일을 읽어오기 위한 선언, 한글 지원하기 위해 euc-kr로 encoding , text도 되고 csv 확장자 도 됨. 안에 내용만 중요할 뿐.
InputStreamReader reader = new InputStreamReader(new FileInputStream("test.txt"), "euc-kr");
//tokenizer 선언.
StreamTokenizer tokens= new StreamTokenizer(reader);
//구분자 선언. ' '에 들어간 단어를 기준으로 한 토큰의 범위를 결정하게 된다.
tokens.quoteChar(',');
while(tokens.nextToken()!= tokens.TT_EOF){ //파일을 전부 읽을떄까지 실행하라는 의미.
// System.out.println(tokens.sval+" / "+tokens.lineno());
name1 = tokens.sval;
tokens.nextToken();
// System.out.println(tokens.sval+" / "+tokens.lineno());
name2 = tokens.sval;
tokens.nextToken();
// System.out.println(tokens.sval+" / "+tokens.lineno());
name3 = tokens.sval;
tokens.nextToken();
// System.out.println(tokens.sval+" / "+tokens.lineno());
name4 = tokens.sval;
tokens.nextToken();
// System.out.println(tokens.sval+" / "+tokens.lineno());
name5 = tokens.sval;
//arraylist에 넣기 위한 작업.
arr.add(new infolist(name1,name2,name3,name4,name5));
}
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("error"+e);
}
//각 정보가 잘 들어갔나 확인하는 곳.
for(infolist a : arr){
System.out.println(a.name1+"/"+a.name2+"/"+a.name3+"/"+a.name4+"/"+a.name5);
}
}
}
//정보저장하기 위한 선언.
class infolist{
String name1,name2,name3,name4,name5;
public infolist(String a, String b, String c,String d, String e) {
// TODO Auto-generated constructor stub
name1=a;
name2=b;
name3=c;
name4=d;
name5=e;
}
}
숫자파일들은 sval로 받을 경우 띄엄띄엄씩 -_- 표시가 되네요.;;
참 신기함..- _-;;;;
아래는 생각해볼 문제...
솔직히 위의 코드는 csv의 형식이 짧고 정해져있다는 가정하에 쓴것 인데...
다음과 같은 대단위의 통계 자료의 CSV파일이 된다면 어떻게 처리할것인가..?
[Java] 암호화 알고리즘 - Blowfish (0) | 2012.04.01 |
---|---|
[JAVA] 자바 랜덤 함수, 비중복 랜덤 값 뽑기. (0) | 2011.09.15 |
[개인공부] enum 역활 및 활용. (0) | 2011.04.28 |
[개인공부]java.util.Collection (0) | 2011.04.22 |
Java 개인공부. (0) | 2011.04.16 |
댓글 영역