개발/java

기본입출력으로 파일 복사하기

나태쿤 2021. 4. 4. 19:34
728x90

프로그램에서 입력/출력을 Input/Output 이라하여 I/O 라고한다

 

자바에서 간단한 파일 복사를 설명하려한다

 

우선 그림으로 보여주기전에 몇가지 개념을 잡자

 

무작정 코드보기전에 우리가 평소에 "복사"를 수 해본적이 있을것이다.

당연한 행동에 대해서 관찰을 해보자.

 

자바 프로그램입장에서 보면 이정도 특징이 있는 것 같다

- 읽어오는 대상이 있다.

- 읽은 결과로 새로운 파일을 복사한다.

 

그런데 평소와는 다르게 자바에서는 스트림이란 걸로 

자바프로그램과 파일간의 연결통로를 형성해 줘야하는데 이게 바로 스트림이다

스트림은 맨첨에 언급한 부분처럼 입력/출력 스트림이 각각 존재한다

동시에 처리할순 없고 단방향성이다 ( 고속 도로라고 생각하면 편할것 같다)

 

그림으로 표현 해보겠다.

 

 

 

 

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.FileInputStream;
import java.io.FileOutputStream;
 
public class Test01 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        try(FileInputStream fi = new FileInputStream("Rollin.txt");
            FileOutputStream fo = new FileOutputStream("Rollin가사.txt");)    
        {
            int c = 0
            while((c = fi.read()) != -1) {    // 1바이트를 입력스트림에서 읽고 그 코드값을 c에 저장
                fo.write(c);                // 읽은 코드값을 출력스트림에 출력 즉, 파일에 기록한다
            }                                // 더이상 읽을게 없다면 -1 상태에 while문이 종료된다
            
            
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}
 
cs

#11번 행

입력 스트림을 생성한다. 매개변수로 Rollin.txt 을 입력하였다.

자바프로그램 <--------- Rollin.txt 의 입력 스트림을 형성하였다.

(Rollin.txt 라는 파일이 현재 존재해야한다.)

 

#12번 행

출력 스트림을 생성한다. 매개변수로 Rollin가사.txt 을 입력하였다.

자바프로그램 ----------> Rollin가사.txt 의 출력 스트림을 형성하였다.

 

하지만 아직 각각 스트림으로 부터 읽거나 쓰여진것은 없다.

 

#14번 행

14번에 int c = 0 이라고 선언 및 초기화를 하였는데 쓰임이 따로있다.

 

#15번 행

15번에 While문이 중요한데 ,

입력스트림(fi)로 부터 read() 메서드로 파일에 쓰여진 내용을 1바이트 만큼 읽는다. 

해당 메서드의 리턴값은 int이기 때문에 그를 담을 변수로 14번행에서 int c 를 선언 하였던 것이다.

(이해가 안될수도있는데 예를들어 Rollin.txt에 A 라고 적혀있었다면 65라는 값이 저장된다  (아스키코드값))

 

#16번 행

c에 저장된 즉, 1바이트 만큼 읽어서 얻은 아스키 코드값을

출력스트림(fo)의 write메서드에 매개변수로 c를 넣어서 

Rollin가사.txt 파일에 작성한다! 

이 행위를 while문으로 반복하는것이다. 

1바이트씩 읽으면서 , 더이상 읽을게 없으면 -1을 리턴하는데 그전까지 반복하는 조건이다.

 

 

 

이렇게 저장하고 실행해보자!

실행후에 F5를 눌러 프로젝트를 새로고침 하면

 

 

 

 

다음처럼 복사된것을 확인할 수 있다.

 

이 기초를 근간하여 업로드 다운로드 개념이 출발하는것 같다.

728x90