본문 바로가기

옛날

FileReader로 파일 읽어보기.

개발환경 :

Windows 10 Home 64bit

Java Development Kit 1.8.0_112

Eclipse Kepler Service Release 2




파일 읽기 (FileReader)


(C드라이브에 위치)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package io;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class IO {
 
    public static void main(String[] args) throws FileNotFoundException {
        try {
            FileReader fr = new FileReader("C://test.txt");
            
            System.out.println(String.valueOf((char)fr.read())); //read - 문자를 하나씩읽어옴
            
            if(fr!=null) fr.close(); //FileReader객체는 사용 후 꼭 close처리 해야함.
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
cs

(C://test.txt 와 같이 String형으로 파일을 매개변수로 줘도 되지만 File 객체를 매개변수로 넘겨줘도 된다.)

(오버로드되있는 모습)


read()는 int형 유니코드로 반환하며 다음 문자가 존재하지않으면 -1을 반환하기떄문에 따로 출력을 위해선

cast연산자와 형변환을 이용하여 출력을 해줘야한다. ( String.valueOf((char) )


이클립스 내의 출력 결과를 보자.

첫번째 문자인 A밖에 출력이 되지 않은 모습이다. read()는 문자 하나만 가져오기 때문이다.

그렇기떄문에 모든 문자를 출력하려면 반복문으로 처리를 해줘야하는 번거로움이 생긴다.



번거로움을 없앨려면 다른 오버로딩된 read 메서드를 사용하여야한다.


그 중 2번째 것과 4번쨰것을 알아볼건데

read(char[] arg0) - char형 배열을 매개변수로 받는데 이것을 버퍼라 부른다. 모든 문자를 다 읽어들인다.


read(char[] arg0, int arg1, int arg2) - 위와 동일하나 읽을 문자를 오프셋과 길이를 이용해 원하는 만큼의 문자를 읽어들일 수 있다.


실습해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package io;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class IO {
 
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("C://test.txt");
            
            char[] char_array = new char[64]; //char형 배열 선언 (버퍼 선언)
            fr.read(char_array); //버퍼에 문자를 저장해둔다.
            
            System.out.println(String.valueOf(char_array));
            
            if(fr!=null) fr.close();
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
cs


일단 char 배열(버퍼)를 64의 크기로 생성한 후 read메서드로 버퍼에 내용물을 집어넣는다고

보면 되는데 이 때 버퍼의 크기가 내용물의 크기보다 적으면 잘려서 나온다 이 점 유의할 것


ㅁ는 공백을 의미. 공백을 없애고 싶다면 System.out.println(String.valueOf(char_array).trim());  이렇게

trim()메서드를 넣어주면 된다. 공백을 제거해주는 메서드다.


이제 read(char[] arg0, int arg1, int arg2) 를 이용해서 원하는 만큼만 출력해보자.

앞의 ABCD만 한번 출력해볼건데,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package io;
 
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class IO {
 
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader("C://test.txt");
            
            char[] char_array = new char[64];
            fr.read(char_array,4,4); //4칸만큼 공백을 주고나서 4개의 문자만 읽기
            
            System.out.println(String.valueOf(char_array));
            
            if(fr!=null) fr.close();
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
cs

(공백을 확인하기위해 trim메서드 제거함)


4칸이 공백으로 띄어지고 ABCD 4개의 문자만 출력되는걸 볼 수 있다.