JAVA :: 입출력

smi·2021년 2월 21일
0

JAVA (자바)

목록 보기
34/62
post-thumbnail

📝 입출력 스트림

💬 응용프로그램과 입출력 장치를 연결하는 소프트웨어 모듈 (+ java.io)


💡 스트림 연결 (ex. 바이트 스트림과 문자 스트림 연결)

InputStreamReader rd = new InputStreamReader(System.in);

while(true) {
    int c = rd.read(); //  입력 스트림으로부터 키 입력. 
    if(c == -1) // 입력 스트림이 끝인 경우
        break;
}        

💡 텍스트 파일 읽기

💬 파일 입력 스트림 생성(파일 열기) : FileReader 스트림

FileReader fin = new FileReader("c:\\test.txt"); // FileReader 스트림 생성 후 텍스트 파일 연결

생성자

주요 메소드

💬 파일 읽기 : fin.read()

▶ 파일로부터 문자 하나를 읽어 리턴하며, 파일의 끝을 만나면 -1을 리턴

int c;
while((c = fin.read()) != -1) { 
    System.out.print((char)c); // 문자 c를 화면에 출력한다.
}    
⚠ read()의 리턴 타입은 반드시 int 타입으로 한다.

💬 스트림 닫기 : close()


💡 파일 입출력 중 예외 처리

☝ 파일의 경로명이 틀리거나, 파일을 열 수 없는 경우 : FileNotFoundException 예외 발생

✌ 파일 읽기, 쓰기, 닫기를 하는 동안 디스크 오작동이나 파일이 깨진 경우 : I0Exception 예외 발생

💬 때문에 파일 입출력 코드에는 반드시 입출력 코드 전체를 감싸는 try-catch 블록이 필요


💡 텍스트 파일 쓰기

💬 파일 출력 스트림 생성 : FileWriter 스트림

FileWriter fout = new FileWriter("c:\\test.txt"); 
  // FileWriter 스트림 객체 생성 후 파일과 스트림 연결

생성자

주요 메소드

💬 파일 쓰기 : write() 메소드

fout.write('A'); // 문자 'A'를 파일에 기록 ⇒ 문자 하나씩 기록

char[] buf = new char [10];
fout.write(buf, 0, buf.length); // buf[0]부터 버퍼 크기만큼 쓰기 ⇒ 한 블럭씩 기록

💬 스트림 닫기 : close()


💡 바이너리 파일 쓰기

💬 파일 출력 스트림 생성 : FileOutputStream 스트림

FileOutputStream fout = new FileOutputStream("c:\\test.out"); 
  // 스트림 생성 후 파일을 생성하여 스트림에 연결

생성자

주요 메소드

💬 파일 쓰기 : write() 함수

byte b[] = {1,2,3,4,5,6};
for(int i = 0; i<b.length; i++)
    fout.write(b[i]); // 배열 b의 바이트를 바이너리 그대로 기록 ⇒ 배열 데이터 기록

fout.write(b); // 배열 b의 바이트 모두 기록 ⇒ 통째로 기록

💡 바이너리 파일 읽기

💬 파일 읽는 스트림 생성 : FileInputStream 스트림

int n = 0, c;
while((c = fin.read()) != -1) { 
    b[n] = (byte)c; // 읽은 바이트를 배열에 저장
    n++
}    
⇓ 한 줄 코드
fin.read(b); // 배열 b의 바이트 크기만큼 바이너리 그대로 읽기

생성자

주요 메소드

profile
공부한 거 올려요 :)

0개의 댓글