기본입출력으로 파일 복사하기
프로그램에서 입력/출력을 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를 눌러 프로젝트를 새로고침 하면

다음처럼 복사된것을 확인할 수 있다.
이 기초를 근간하여 업로드 다운로드 개념이 출발하는것 같다.