본문 바로가기

JAVA

[JAVA] 기초문법 - 파일입출력(1)

자바 입출력

자바에서 입출력은 예외처리가 필수적이다.

입출력을 동시에 하는 스트림은 없다.

입력스트림 출력스트림이 독립적으로 존재한다.

바이트 단위 읽고 쓰거나, 문자단위로 읽고 쓰거나 둘중 하나이다.

기반 스트림이거나 보조스트림이거나 둘중 하나이다.

일반적으로 입력스트림과 출력스트림이 독립적으로 존재하지만, 파일용으로 입출력을 동시에 가능하게 하는 randomacessfile이라는 클래스가 하나 존재한다.

system.in.read()로 알파벳 하나를 읽을 수 있다.(단 반환형은 int형이다.)(예외처리 필수) 알파벳을 출력하려면 char형으로 형변환을 해줘야한다. sysyem.in은 한 바이트씩 읽는다.

여러 알파벳 입력 받기

엔터가 눌릴때까지 입력을 받고 한글자씩 출력 하는데 개행 없이 출력하는 예제이다.

스캐너클래스를 범용적으로 많이 사용한다.

사용법

스캐너 객체 생성후, scanner.nextLine()을 하면 한줄을 읽는다.

scanner.nextInt()를 하면 int형을 읽는다.

사용법

FileInputStream으로 파일을 읽어서 한 바이트씩 3번 출력 하는 예제이다. 예외처리가 필수! input.txt파일을 만들어야한다. 파일을 읽어드릴때 int형으로 반환하기 때문에 알파벳을 출력하려면 char형 형변환을 해줘야한다.

파일을 읽다가 파일의 끝을 도달하면 -1을 반환한다. 이를 이용하여 파일을 처음부터 끝까지 읽기 위해서는,

-1을 만나기전까지 계속 읽고 출력하면 된다. 단 바이트 단위로 읽기때문에 한글을 읽을 수 없다.

FileReader을 이용해서 읽으면 한글을 출력할 수 있다.(파일의 인코딩 값으로 읽어들인다.)

10개를 저장할 수 버퍼에 파일을 읽어서 저장 후, 버퍼를 출력하는 예제. 파일에는a~z까지 알파벳이 적혀있다.

자동으로 파일이 닫히는 autofilecloser을 구현했기때문에 따로 파일을 닫아주지 않아도 된다.(try catch resource 구문 이용)

마지막줄에 z이후에 qrst가 출력되는 이유는 이전버퍼에 저장되어있는 klmnopqrst중 klmnop까지만 덮어졌기 때문이다.

이를 방지하기 위해서는 읽은 갯수를 이용하면 된다.

fis.read(bs)는 읽은 갯수를 반환한다.

파일 쓰기

지금까지는 파일에서 읽어오기를 했다. 지금부터는 파일에다가 작성(write)하는 것을 배운다.

input스틀림과 다르게 wirte할때는 파일이 없으면 파일을 생성해준다.

사용법

파일이 자동으로 생성되고 그 파일에 ABC가 적혀있는 것을 볼 수 있다. write는 매개변수로 int형을 받지만 실제로는 아스키에 대응하는 문자를 write해준다.

2번째 매개변수에 true을 넣어주면 기존 파일에 이어서 작성한다. 디폴트값은 false인데 이 경우 계속해서 덮어쓴다.

버퍼를이용한 write 사용법

데이터를 버퍼에 저장하고 해당 버퍼를 파일에 그대로 write 하는 예제이다.(a~z까지 쓰여야한다.)

FileWriter 클래스 활용한 write

FilewWriter는 문자열,버퍼,문자 등 다양한 값을 write할 수 있다.

'JAVA' 카테고리의 다른 글

[JAVA] 기초문법 - 파일입출력(2)  (0) 2022.01.05
[JAVA] 기초문법 - 예외처리  (0) 2022.01.05
[JAVA] 기초문법 - 스트림  (0) 2022.01.05
[JAVA] 기초문법 - 람다식  (0) 2021.12.01
[JAVA] 기초문법 - 내부클래스  (0) 2021.12.01