▸JAVA/라이브러리(API)

java.io.FileReader 주요 메소드 [1/1]

코데방 2019. 12. 15.
728x90

[ FileReader ]

  • FileInputStream과 유사한 기능
  • 문자 스트림으로서 문자 단위의 바이트 변환 기능을 가짐

FileInputStream 클래스가 바이트 스트림이라면 FileReader 클래스는 문자 스트림입니다. 즉, 바이트 단위가 아닌 문자 단위로 입출력을 수행합니다. 

 

외부 리소스 입출력에 대한 개념과 설명은 아래 링크글을 참조하시면 됩니다.

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_io / nio / nio2 [1/3]

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.io [2/3]

2019/12/16 - [JAVA/기본 문법] - 외부 데이터 입출력_java.nio [3/3]

 


 

[ 생성자 ]

  • new FileIReader(File file)
  • new FileReader(FileDescriptor jdObj)
  • new FileReader(String name)

생성자는 FileInputStream과 동일합니다. 파일의 주소와 이름 정보를 가진 객체를 받아 해당 파일과의 입력 스트림을 생성합니다. 

 


 

[ int read() ]

  • int read() : 한 문자씩 읽어 정수로 반환
  • int read(char[] cbuf) : 파일의 모든 내용을 문자 단위로 읽어 char 타입 배열에 입력
  • int read(char[] cbuf, int off, int len) : 'len' 길이만큼 읽어서 배열의 'off'번째 위치부터 저장

역시 FileInputStream과 동일합니다. 다른점은 문자 단위로 읽어오기 때문에 byte 타입이 아닌 char 타입의 배열에 입력해 준다는 점입니다. 바이트 단위로 읽을 때 한글은 제대로 읽어오기가 힘들지만 문자 단위로 읽을 때는 2byte로 이루어진 한글도 무리 없이 읽어올 수 있습니다.

 

그리고 마찬가지로 기본 스트림 클래스이기 때문에 파일 포인터는 시작→끝의 한 방향으로만 흘러가게 됩니다. 

 

package study.first;

import java.io.FileReader;

public class Test {
	public static void main(String[] args) {

		char[] arr = new char[20];
		
		// try-with-resources구문으로 리소스 자동 해제 수행 
		// input.txt : "헬로 월드..!!"
		try (FileReader fi = new FileReader("input.txt")) {
			
			// 한글자 읽기
			System.out.println((char)fi.read()); // "헬"
			
			// char 타입 배열에 넣어서 출력
			fi.read(arr);
			for(char c : arr)
				System.out.print(c);
			
		} catch (Exception e) {			
			System.out.println("예외처리");
		}		
	}
}

 


[ int close() ]

  • 파일을 닫아줌
  • try-with-resources 문에서는 불필요
  • try-catch-finally 문에서 사용 (finally문 내에서도 예외 처리를 해줘야 함)

 

[ String getEncoding() ]

  • 파일의 현재 문자 인코딩이 사용하고 있는 표준 정보 반환
package study.first;

import java.io.FileReader;

public class Test {
	public static void main(String[] args) {

		// try-with-resources구문으로 리소스 자동 해제 수행 
		// input.txt : "헬로 월드..!!"
		try (FileReader fi = new FileReader("input.txt")) {
				
			System.out.println(fi.getEncoding()); // UTF8
		
		} catch (Exception e) {			
			System.out.println("예외처리");
		}
	}
}

 


 

[ Boolean ready() ]

  • 현재 파일 포인터 위치에서 더 읽을 문자가 남았는지 여부를 반환
package study.first;

import java.io.FileReader;

public class Test {
	public static void main(String[] args) {

		// try-with-resources구문으로 리소스 자동 해제 수행 
		// input.txt : "헬로 월드..!!"
		try (FileReader fi = new FileReader("input.txt")) {
				
			System.out.println(fi.ready()); // true
		
		} catch (Exception e) {			
			System.out.println("예외처리");
		}
	}
}

 


 

[ long skip(long n) ]

  • 현재 파일 포인터에서 'n'개의 문자만큼 뒤로 이동시킴
package study.first;

import java.io.FileReader;

public class Test {
	public static void main(String[] args) {

		// try-with-resources구문으로 리소스 자동 해제 수행 
		// input.txt : "헬로 월드..!!"
		try (FileReader fi = new FileReader("input.txt")) {
				
			fi.skip(3); // 3글자 뒤로 이동
			System.out.println((char)fi.read()); // "월"
			
		} catch (Exception e) {			
			System.out.println("예외처리");
		}
	}
}

 

728x90

댓글

💲 추천 글