티스토리 뷰

  이번 시간에는 파일을 통한 입출력 방법에 대해 알아보자. 우리는 Java 프로그램을 통해 다양한 파일에서 데이터를 읽어 들이기도 하고, 파일을 생산해내기도한다. 이번 주제 역시 기초적인 Java 프로그래밍 지식은 반드시 필요하다.


1. 파일 입력

   객체지향 언어인 Java에서 파일 입출력 역시 클래스를 통해 진행된다. 기본 매커니즘은 파일 입출력을 담당하는 클래스의 객체를 선언하고, 읽고자 하는 파일을 파라미터로 선언해야 한다. 그 이후, 해당 객체의 메소드를 통하여 파일을 읽어 들으면 된다. 아래에서 파일 입출력에 대해 자세히 알아보자. 

  다음과 같은 간단한 구조의 텍스트 파일을 읽어 들이는 방법에 대해 알아보자.

  

  Java에서 파일을 읽는 클래스는 'FileInputStream'이다. 해당 클래스를 선언에 파일을 읽는 방법은 아래와 같다.


3
4
5
6
7
8
9
10
11
12
13
14
1
import java.io.*;
 
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        byte[] a = new byte[1024];
        FileInputStream in = new FileInputStream("List.txt");
        in.read(a);
        System.out.println(new String(a));
        in.close();
    
    }
 
}
cs

  ru

  코드는 매우 간단하다. Java의 특성상 각 기능을 담당하는 클래스만 선언해주면 되므로, 해당 기능을 담당하는 클래스인 FileInputStream을 실행해주고, 클래스 파라미터로 텍스트 파일인 "List.txt"를 선언하면 된다.


  그리고 위의 프로그램 결과는 아래와 같이 출력된다.





  아래처럼 출력되는 이유는 바로 입력을 받는 변수를 byte로 설정해서 그렇다. byte크기를 미리 정해주여야 하므로 파일을 읽지 못한 부분은 공백이 생기게 되고 아래와 같은 결과가 나온다. 이런 문제를 해결하기 위해서 BufferedReader와 조합을 해준다면 쉽게 해결할 수 있다.



2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.io.*;
 
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        BufferedReader br = new BufferedReader(new FileReader("List.txt"));
        
        while(true){
            String line = br.readLine();
            if (line==nullbreak;
            System.out.println(line);
        }
        
        br.close();
    }
 
}
cs


  BufferedReader 클래스를 이용하여 파일을 읽고, readLine을 통해서 파일의 줄 단위로 내용을 읽어낸다. 그리고, 파일이 끝나면 종료시키게 된다. 이 과정을 통해 파일 길이의 변화 없이도 자유롭게 사용이 가능하다.



2. 파일 출력


- 파일 만들기

  우선 파일 출력을 하기 위해서는 파일을 생성해야 한다. Java에서 파일을 생성하는 클래스는 FileOutputStream이다. 해당 클래스의 파라미터로 파일명과 파일 위치를 지정해 줄 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        FileOutputStream file = new FileOutputStream("NewList.txt");
        
        file.close();
        
    }
 
}
cs


  해당 코드를 실행하면 NewList.txt라는 파일이 새로 생성된다. 위와 같이 별도의 경로를 지정하지 않는다면, Workplace에 있는 해당 프로젝트 폴더에 파일이 생성될 것이고, 별도로 경로를 지정해준다면, 해당 경로에 파일이 생성된다. 


- 파일 입력


  이제 파일에 내용을 넣는 방법을 알아보자. FileOutputStream의 write 함수를 사용한다면, 파일에 내용을 입력 할 수 있다. OutputStream 클래스의 경우 byte단위로 파일을 읽게 된다. 따라서 String 값을 getBytes 메소드를 이용해 변환해주어야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
import java.io.*;
 
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        BufferedReader br = new BufferedReader(new FileReader("List.txt"));
        
        FileOutputStream file = new FileOutputStream("NewList.txt");
        
        while(true){
            String line = br.readLine();
            if (line==nullbreak;
            line += "\r\n";
            file.write(line.getBytes());
            System.out.println(line);
        }
        
        file.close();
        br.close();
    }
 
}




  이 과정을 거치게 되면 "List.txt"에 있는 파일을 그대로 입력 받아 "NewList.txt" 파일에 출력 시킬 수 있다.


  이 방법은 역시 바이트 크기 변환에서 문제가 발생한다. 물론, 앞선 경우와는 다르게 While문에 들어가 있기 때문에 크기를 별도로 설정하지 않아도 되지만 직관적으로 같은 변수임에도 불구하고 변수 타입을 바꾸는 과정은 프로그래밍 상으로 좋지 않다. 어쩔 수 없다면 바꿔야겠지만 그 과정을 생략한다면 더 좋은 프로그래밍이 될 것이다. 따라서, String 변수로 그대로 입력하고 싶다면 다음과 같이 PrintWrite클래스를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.*;
 
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        BufferedReader br = new BufferedReader(new FileReader("List.txt"));
        
        PrintWriter file = new PrintWriter("NewList.txt");
        
        while(true){
            String line = br.readLine();
            if (line==nullbreak;
            line += "\n";
            file.println(line);
            System.out.println(line);
        }
        
        file.close();
        br.close();
    }
 
}
 
cs


  이 과정을 통해 별도의 변수 변환 작업 없이 쉽게 파일 입력이 가능하다.


  마지막으로 기존에 있는 파일에 새로운 값을 입력하는 경우는 아래와 같이 FileWriter 클래스를 이용하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
import java.io.*;
 
public class main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        
        BufferedReader br = new BufferedReader(new FileReader("C:/Users/adds6/Downloads/List.txt"));
        
        PrintWriter file = new PrintWriter("NewList.txt");
        
        
        while(true){
            String line = br.readLine();
            if (line==nullbreak;
            line += "\n";
            file.println(line);
            System.out.println(line);
        }
        
        file.close();
        
        FileWriter fw = new FileWriter("NewList.txt",true);
        fw.write("파일 입력이 완료되었습니다.");
        
        fw.close();
        br.close();
    }
 
}
 
 
cs


  다음과 같은 방법으로 기존에 있는 파일에 내용을 추가 할 수 있다.

'Skill > Programming - Basic' 카테고리의 다른 글

6.알고리즘 시간복잡도  (0) 2018.02.27
5. Brute Force Algorithm  (0) 2018.02.22
3. Java 입출력 함수 - 콘솔 입출력  (0) 2018.02.12
2. 수학적 귀납법  (0) 2018.01.25
1.논리와 명제  (0) 2018.01.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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 27 28 29 30 31
글 보관함