![]()
프로젝트를 시작하는 날이 다가온다.
하지만 나는 아직도 게시판에 파일 첨부하는 법을 모른다.
그래서 오늘은 InputStream, OutputStream에 대해 공부했다.
간단히 이미 존재하는 텍스트 파일을 읽고 쓰고 복사해볼 것이다.
Input(입력) 과 Output(출력)이 뭐냐
자바를 막 배우기 시작할때 Scanner를 써봤는가
키보드를 누르면 해당 문자가 입력된다.
그리고 System.out.println() 으로 콘솔에 출력을 해봤을 것이다.
이것이 입력과 출력이다.
정리하면 컴퓨터 내부 또는 외부의 장치와 프로그램 간의 데이터를 주고받는 것을 말하는 것이다.
우리는 파일을 읽고(입력) 써(출력)볼것이다
우리는 파일을 읽고 쓰려고 한다.
자바 애플리케이션에서 파일을 읽는게 어떻게 가능한 것일까?
파일을 읽으려면 자바와 파일을 연결해주는 길이 있어야 할 것이다.
이것이 스트림이다.
InputStream과 OutputStream은 각각 입력과 출력을 위한 길이라고 이해하면 된다.
파일을 읽어올때는 InputStream의 자손인 FileInputStream,
쓸때는 OutputStream의 자손인 FileOutputStream을 사용할 것이다.
일단 바탕화면에 test.txt 파일을 만들고 그 안에는 "This is a test file." 이라고 저장해보자.
test 파일에 대한 InputStream 을 생성하고
하나씩 불러오면 된다.
코드를 보자
public static void main(String[] args) throws IOException {
String file = "C:/Users/thdrk/OneDrive/Desktop/test.txt";
//file 에 대한 입력(읽기) 스트림 생성
FileInputStream inputStream = new FileInputStream(file);
//available은 스트림에 남은 데이터 수를 반환한다.
while(inputStream.available() > 0) {
//read()는 byte 타입의 데이터를 반환하기 때문에
//char로 캐스팅 해줘야 우리가 원하는 결과가 나온다.
System.out.print((char)inputStream.read());
}
//스트림은 사용 후 꼭 닫아주자.
inputStream.close();
}
자신만의 txt 파일을 만들어 읽어보자.
위에서 만든 test.txt 파일에 내용을 덮어써보자.
내용은 맘대로 정하자.
public static void main(String[] args) throws IOException {
String file = "C:/Users/thdrk/OneDrive/Desktop/test.txt";
//byte 타입의 데이터를 스트림으로 흘려보내야 하기 때문에 byte 배열로 바꿈.
byte[] data = "I want to be a good developer.".getBytes();
//file 에 대한 출력(쓰기)스트림 생성. 두번째 파라미터에는 false 를 줘서 추가하지 않고 덮어쓰도록 함
FileOutputStream outputStream = new FileOutputStream(file, false);
// data 의 0번째 요소부터 data.length 만큼 file 에 출력한다.
outputStream.write(data, 0, data.length);
//스트림은 사용 후 꼭 닫아주자.
outputStream.close();
}
바탕화면에 가서 test.txt 파일을 확인해보자.
놀라운 결과가 당신을 기다리고 있을 것이다.
위의 것들을 응용해서 복사해보자.
필자는 호기심에 jpg 파일을 txt 파일에 복사해봤다.
중국어 같은 언어가 많이 들어있었다.