자바/자바팁
NIO 간단한 파일읽기 예제
행복한 수지아빠
2012. 1. 19. 19:04
반응형
출처 : http://devhome.tistory.com/10
FileChannel은 java.nio.channels.FileChannel 에 존재하는 새로운 io 패키지중의 하나이다.
파일 접근적인 속도면에서는 java.io 에서 제공하는 다른 패키지에 비해 성능이 우수하다.
아직은 많이 보편적으로 사용하는 패키지가 아니어 많은 자료를 구하지 못해 간단한 파일을 읽는 방법을 소개한다.
[ 파일읽기 예제소스 ]
01.import java.io.File;02.import java.io.FileInputStream;03.import java.io.IOException;04.import java.nio.ByteBuffer;05.import java.nio.channels.FileChannel;06. 07.public class ObjectTest08.{09.public static void main(String args[])10.{11.File inFile = null;12.FileInputStream inStream = null;13.FileChannel inChannel= null;14.ByteBuffer bBuffer = null;15.String[] strBuffer= null;16. 17.try18.{19.// Open File Channel20.inFile = new File("test.txt");21.inStream = new FileInputStream(inFile);22.inChannel= inStream.getChannel();23. 24.// buffer init...25.bBuffer = ByteBuffer.allocate((int)inChannel.size());26.// ANSI & UTF-16 : inChannel.read(bBuffer);27.// UTF-8 : inChannel.read(bBuffer, 3);28.inChannel.read(bBuffer);29. 30.// casting : ByteBuffer -> String31.// ANSI : strBuffer = new String(((ByteBuffer)bBuffer.flip()).array()).split("\r\n");32.// UTF-8 : strBuffer = new String(((ByteBuffer)bBuffer.flip()).array(), "UTF-8").split("\r\n");33.// UTF-16 : strBuffer = new String(((ByteBuffer)bBuffer.flip()).array(), "UTF-16").split("\r\n");34.strBuffer = newString(((ByteBuffer)bBuffer.flip()).array()).split("\r\n");35. 36.// print read data from file37.for( int i = 0; i < strBuffer.length; i++ )38.System.out.println(strBuffer[i]);39.}40.catch(IOException e)41.{42.e.printStackTrace();43.return;44.}45.finally46.{47.try48.{49.if( inStream != null )50.inStream.close();51.if( inChannel != null )52.inChannel.close();53.}54.catch(IOException e)55.{56.e.printStackTrace();57.return;58.}59.}60.}61.}위의 프로그램 소스는 현재 대용량의 파일의 경우는 사용해서는 안돼는 코드이다. 한번에 파일의 전 데이터를
읽어오도록 되어 있기때문이다. 그리고 ByteBuffer의 초기화 사이즈는 int형이고 FileChannel의 사이즈는 long형
을 사용하고 있기 때문에 문제가 발생한다.
반응형