Java/basic

[JAVA] 입출력 스트림과 파일 입출력

동누크 2022. 12. 26. 15:50

자바의 스트림(Stream)

  • 자바 스트림은 입출력 장치와 자바 응용 프로그램 연결
  • 입력 스트림 : 입력 장치 -> 자바 프로그램
  • 출력 스트림 : 자바 프로그램 -> 입력 장치
  • 입출력 스트림 기본 단위 : 바이트
  • 바이트 입출력 스트림 : 단순 바이트 스트림 처리 (Ex. binary 파일)
  • 문자 입출력 스트림 : 문자만 입출력하는 스트림 (Ex. txt 파일)

바이트 스트림

1. FileInputStream

  • 파일 읽기
FileInputStream fin = new FileInputStream("c:\\test.txt");
int c;
while((c = fin.read()) != -1) {  // 파일의 끝을 만나면 -1 return
    System.out.print((char)c); 
}

2. FileOutputStream

  • 파일 쓰기
FileOutputStream fos = new FileOutputStream("c:\\test.out");
int num[]={1,4,-1,88,50};
byte b[]={7,51,3,4,1,24};
for(int i=0; i<num.length; i++) {
    fos.write(num[i]);
}
fos.write(b); 
fos.close();

문자 스트림

  • 유니코드로 된 문자를 입출력하는 스트림
  • Reader / Writer
  • InputStreamReader / OutputStreamWriter : 바이트 스트림과 문자 스트림을 연결
  • FileReader / FileWriter : 텍스트 파일에서 문자 데이터 입출력

1. FileReader

  • 텍스트 파일 읽어 오기
FileReader fileReader;
try {
    fileReader = new FileReader("c:\\windows\\system.ini");
    int c;
    while ((c = fileReader.read()) != -1) {  // 한 문자씩 읽음
        System.out.print((char) c);
    }
    fileReader.close();
} catch (IOException e) {
    e.printStackTrace();
}

2. InputStreamReader

  • 한글 텍스트 파일 읽어 오기
InputStreamReader inputStreamReader;
FileInputStream fileInputStream;

try {
    fileInputStream = new FileInputStream("c:\\Users\\Dell\\Desktop\\test.txt");
    inputStreamReader = new InputStreamReader(fileInputStream);

    int c;
    while ((c = inputStreamReader.read()) != -1) {
        System.out.print((char) c);
    }

    inputStreamReader.close();
    fileInputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

3. FileWriter

  • 텍스트 파일에 키보드로 입력한 값 저장하기
Scanner sc = new Scanner(System.in);
FileWriter fileWriter;
int c;

try {
    fileWriter = new FileWriter("c:\\Users\\Dell\\Desktop\\test.txt");
    String line = sc.nextLine();
    fileWriter.write(line);
    sc.close();
    fileWriter.close();
} catch (IOException e) {
    e.printStackTrace();
}

'Java > basic' 카테고리의 다른 글

[JAVA] 네트워크  (0) 2022.12.26
[JAVA] 제네릭과 컬렉션  (0) 2022.12.26
[JAVA] 상속  (0) 2022.12.26