Archives
Recent Posts
«   2024/10   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[9일차 Java] FileStream 본문

Computer/Java

[9일차 Java] FileStream

Wise-99 2023. 5. 8. 22:41

 

 

출처 : 안드로이드 앱스쿨 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