반응형

오늘은 지오툴즈를 활용하여 shpaefile 속성 데이터를 읽어보도록 하겠다.

 

shapefile을 convert하여 mysql 또는 postgis 테이블로 바꿔서 속성을 읽어 온 적이 있지만

 

이번엔 직접 dbf 파일을 읽어서 테스트해보겠다.

 

import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;

import org.geotools.data.shapefile.dbf.DbaseFileReader;

public class ReadDbfFile(){
	
    public static void main(String[] args) throws Exception {

		FileInputStream fis = new FileInputStream(new File("파일경로/파일명.dbf"));
        
        	//파일의 인코딩을 맞춰줘야 글자가 깨지지 않음
		DbaseFileReader dbfReader = new DbaseFileReader(fis.getChannel(), true, Charset.forName("euc-kr"));
		
        	//속성의 필드 사이즈
		int colSize = dbfReader.getHeader().getNumFields();
		
        	//필드 배열을 생성합니다.
		String[] headers = new String[colSize];
		
		for(int i=0;i<colSize;i++) {
			
			headers[i]=dbfReader.getHeader().getFieldName(i);
		}
		
		while (dbfReader.hasNext()) {
                    Object[] values = dbfReader.readEntry();

                    for(int iField=0; iField < colSize; ++iField) {
                        //각 필드의 레코드 데이터를 출력합니다.
                        System.out.println(values[iField].toString());
                    }
       		}

		dbfReader.close();
		fis.close();
	
	}
}

스트림으로 읽기 때문에 데이터 읽는 속도가 빠르다.

 

확실히 레코드 수가 많아도 리소스를 많이 잡아 먹지 않는거 같다.

 

dbf 파일에 접근하는 방법을 찾아보는 도중 sql server에서 파일에 바로 쿼리를 날리는 소스를 보긴했는데

 

좀 더 공부해본 다음에 직접 쿼리로 읽을 수도 있는지 확인해봐야겠다.

반응형

+ Recent posts