안드로이드 개발자의 창고
[9일차 Java] FileStream 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 FileStream이란?
- stream : 데이터를 외부와 읽고 쓸 수 있도록 제공되는 자바 클래스들
- 기본스트림
- 데이터를 직접 읽고 쓸 수 있는 스트림들
- InputStream과 OutputStream을 상속받고 있다.
- 필터스트림
- 기본 스트림들의 보조 역할을 하며 주 목적이 데이터를 가공하는 것이다.
- 기본 스트림외에 다른 기능을 추가 하고 싶을 때 사용하는 스트림이다.
- 필터 스트림을 독립적으로 사용하지 못하고 기본 스트림과의 연결이 반드시 필요하다.
- 필터 스트림은 데이터를 송수신할 수 있는 기능이 없다.
- 필터 스트림에 있는 입출력 함수는 직접 데이터를 입출력하는 것이 아니라 연결되어 있는 기본 스트림에 데이터를 전송하고 기본 스트림에서 데이터 송수신을 하게된다.
- 필터 스트림은 생성자에 기본 스트림을 받고 있다. 생성자를 통해 기본 스트림이 데이터의 송수신을 직접 담당한다.
- 기본스트림
📖 FileOutputStream
- 프로그램에서 파일로 데이터를 전송할 때 사용하는 스트림이다.
- 데이터를 보내고자 하는 파일이 없으면 자동으로 생성된다.
- 주요 메서드
- 생성자(파일이름) : 파일이름의 파일을 열고 출력 스트림을 추출한다.. 이 때 데이터를 덮어 씌워진다.
- 생성자(파일이름, boolean) : 파일이름의 파일을 열고 출력 스트림을 추출한다. 이 때 boolean 값을 true로 주면 쓰고자하는 내용이 뒤에 추가가 된다.
- write : 바이트 형태의 데이터를 파일로 쓴다.
- close : 스트림을 닫는다.
- flush : 메모리에 남겨진 데이터를 모두 송출한다.
📖 FileOutputStream 예제 코드1
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainClass {
public static void main(String[] args) {
saveData1();
}
// 데이터 저장
public static void saveData1() {
try {
FileOutputStream fos = new FileOutputStream("test.txt");
String value1 = "안녕하세요"; // 데이터를 준비한다.
byte [] data1 = value1.getBytes();
fos.write(data1);
fos.flush(); // 출력버퍼에 데이터가 남아 있을 수도 있기 때문에
fos.close(); // 닫아준다.
System.out.println("쓰기 완료");
} catch(Exception e) {
e.printStackTrace();
}
}
}
✔️ 코드 해석
FileOutputStream fos = new FileOutputStream("test.txt");
- 파일을 작성하기 위해 스트림을 생성한다.
- 같은 이름의 파일이 있다면 파일의 내용을 모두 지우고 새로 쓴다.
- 파일이 없다면 생성한다.
byte [] data1 = value1.getBytes();
fos.write(data1);
- value1을 바이트 형태로 가공하여 파일에 데이터를 작성한다.
fos.flush();
fos.close();
- 출력 버퍼에 남아 있을 수도 있는 데이터를 모두 전송한다.
- 스트림을 닫는다.
📖 FileOutputStream 예제 코드2
public static void saveData2() {
try {
FileOutputStream fos = new FileOutputStream("test2.txt", true);
String value1 = "안녕하세요";
byte [] data1 = value1.getBytes();
fos.write(data1);
fos.flush();
fos.close();
System.out.println("쓰기 완료");
} catch(Exception e) {
e.printStackTrace();
}
}
✔️ 코드 해석
FileOutputStream fos = new FileOutputStream("test2.txt", true);
- test2라는 텍스트 파일을 만든다.
- true로 설정했기 때문에 이미 파일이 있다면 기존 내용에 이어서 작성한다.(기본 값은 false)
- 파일이 없다면 파일을 생성해준다.
📖 FileInputStream
- 파일의 데이터를 수신할 때 사용하는 스트림이다.
- 데이터를 읽어올 파일이 없으면 예외가 발생한다.
- 주요 메서드
- 생성자(파일이름) : 파일 이름의 파일을 열고 입력 스트림을 추출한다.
- available : 한번에 데이터를 읽어올 수 있는 양을 알아온다. 한번에 읽어올 수 있는 양이 파일의 용량보다 많을 경우 파일의 용량을 가져온다.
- close : 파일을 닫는다.
- read : 데이터를 바이트 형태로 읽어온다.
- 주요 메서드
📖 FileInputStream 예제 코드
// 읽어오기
public static void readData() {
try {
FileInputStream fis = new FileInputStream("test2.txt");
int byteSize = fis.available();
byte [] byteArray = new byte[byteSize];
fis.read(byteArray); // 데이터를 읽어온다.
fis.close(); // 닫아준다.
// 문자열 객체를 생성한다.
String str1 = new String(byteArray);
System.out.println(str1);
}catch(Exception e) {
e.printStackTrace();
}
}
✔️ 코드 해석
FileInputStream fis = new FileInputStream("test2.txt");
- FileInputStream을 생성한다.
- test2라는 텍스트 파일에 접근한다. 지정한 파일이 없으면 오류가 발생한다.
int byteSize = fis.available();
byte [] byteArray = new byte[byteSize];
- 읽어올 데이터의 양(파일 용량 byte)를 구한다.
- 데이터를 담을 byte 타입의 배열을 생성한다.
'Computer > Java' 카테고리의 다른 글
[9일차 Java] 2ByteStream (0) | 2023.05.09 |
---|---|
[9일차 Java] DataStream (0) | 2023.05.09 |
[8일차 Java] Collection / List / Map / Set (0) | 2023.05.07 |
[8일차 Java] Date와 Calendar (0) | 2023.05.07 |
[8일차 Java] StringBuffer (0) | 2023.05.07 |