Java

[JAVA] 파일 입출력

2023. 5. 19. 12:56
목차
  1. 파일에 쓰기
  2. 1. FileWriter
  3. 2. PrintWriter
  4. 3. BufferedWriter
  5. 4. 파일 이어 쓰기
  6. 파일 읽기
  7. FileReader
  8. BufferedReader
  9. Scanner
  10. 예제

파일에 쓰기

1. FileWriter

fname으로 지정한 파일이 쓰기 모드로 열린다. 없으면 파일을 생성한다.

FileWriter(String fname, boolean append)

두 번째 파라미터로 이어 쓰기 옵션을 선택한다. default는 false이다.

append=true로 설정 시 파일에 남아있는 텍스트 뒤로 이어 쓴다.

fw.write(String str)

파일에 문자열을 입력한다.

fw.close()

FileWriter를 모두 사용한 뒤엔 꼭 close() 메서드로 닫아줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
FileWriter fw = new FileWriter(fname);

String memo = "hello world!!!\n";
fw.write(memo);

String memo2 = "hello java!";
fw.write(memo2);

fw.close();

주의! 

  • write 할 때마다 줄 바꿈이 되지 않는다. "\n"으로 직접 줄 바꿈을 해줘야 한다.
  • append=false(default) 일 때, 새로 실행할 때마다 처음부터 다시 쓴다. (파일에 남아있던 텍스트로부터 이어 쓰지 않는다.)

2. PrintWriter

pw.println() , pw.print()

System.out.println(), print()와 똑같다고 생각하면 된다.

FileWriter와 다르게 직접 줄 바꿈("\n")을 해주지 않고 println을 사용하면 된다.

pw.close()

마찬가지로 pw도 꼭 close()를 해줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
PrintWriter pw = new PrintWriter(fname);

String memo = "hello world!!!";
pw.println(memo);

String memo2 = "hello java!";
pw.print(memo2);

pw.close();

3. BufferedWriter

BufferedWriter로 파일에 쓸 경우 생성할 때 FileWriter를 생성해서 파라미터로 넘겨줘야 한다.

bw.write(String str)

파일에 문자열을 입력한다.

bw.close()

꼭 close() 메서드로 닫아줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
BufferedWriter bw = new BufferedWriter(new FileWriter(fname));

String memo = "hello world!!!";
bw.write(memo);

bw.close();

4. 파일 이어 쓰기

FileWriter

FileWriter fw = new FileWriter(fname,true);

FileWriter(String fname, boolean append)

두 번째 파라미터로 이어 쓰기 옵션을 선택한다. default는 false이다.

append=true로 설정 시 파일에 남아있는 텍스트 뒤로 이어 쓴다.

PrintWriter

PrintWriter pw = new PrintWriter(new FileWriter(fname,true));

BufferedWriter

BufferedWriter bw = new BufferedWriter(new FileWriter(fname,true));

PrintWriter, BufferedWriter의 경우 생성할 때 파라미터로 FileWriter(fname, true)를 넘겨주어야 한다.

주의!
세 가지 경우 모두 파일의 마지막 커서로 부터 이어 쓰기 때문에, 이전에 파일을 작성할 때 마지막에 줄 바꿈을 하지 않았다면, 줄바꿈을 하지 않은 채 그대로 이어 쓴다.

파일 읽기

FileReader

FileReader 클래스로 파일을 찾아서 열 수 있다.

문자 단위로 2byte씩 읽는다.

String fname = "./src/file/memofile.txt"; //상대경로
FileReader fReader = new FileReader(fname);

BufferedReader

BufferedReader로 FileReader를 파라미터로 받아서 생성하면 해당 파일로부터 데이터를 읽어 들인다.

br.readLine()

콘솔 입력을 읽어 들일 때와 마찬가지로 br.readLine() 메서드를 이용한다.

BufferedReader br = new BufferedReader(new FileReader(fname));//파일 입력
//콘솔 입력 BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));

다음 Line을 읽었을 때 null이라면 파일의 끝이므로 while문을 종료한다.

// 파일의 끝(EOF)이라면 null을 반환
while ((str = bReader.readLine()) != null) {
   System.out.println(str);
}

Scanner

sc.hasNextLine() 으로 다음줄이 존재하지 않으면 while문을 종료하는 방식으로 읽을 수 있다.

나머지는 콘솔 입출력과 똑같이 동작한다.

String fname = "./src/file/memofile.txt"; //상대경로
Scanner sc = new Scanner(new File(fname));
while(sc.hasNextLine()){
    //코드
}
sc.close();

예제

in.txt

in.txt 파일에 아래와 같은 데이터가 저장되어 있다.

hello world!!
Hi~Java~
HSRYUUU

이 데이터를 한 줄씩 읽어서 out.txt 파일에 거꾸로(뒤집어서) 출력해 보자.

Code

String f_in = "./src/file/in.txt"; //상대경로
String f_out = "./src/file/out.txt"; //상대경로

BufferedReader br = new BufferedReader(new FileReader(f_in));//f_in 파일에서 읽는다.
PrintWriter pw = new PrintWriter(f_out);//f_out 파일에 쓴다.

String str = "";
while((str = br.readLine())!=null){
    StringBuilder sb = new StringBuilder(str);
    sb.reverse();
    pw.println(sb);
}

pw.close();
br.close();

결과(out.txt)

!!dlrow olleh
~avaJ~iH
UUUYRSH
반응형
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[JAVA] format() 메서드 : 문자열 포맷 지정 / printf()  (0) 2023.06.01
[JAVA] 람다식과 스트림 Stream()  (0) 2023.05.25
[JAVA] 추상 클래스 (abstract class)  (0) 2023.05.18
[JAVA] 상속  (0) 2023.05.17
[JAVA] static과 final  (0) 2023.05.17
  1. 파일에 쓰기
  2. 1. FileWriter
  3. 2. PrintWriter
  4. 3. BufferedWriter
  5. 4. 파일 이어 쓰기
  6. 파일 읽기
  7. FileReader
  8. BufferedReader
  9. Scanner
  10. 예제
'Java' 카테고리의 다른 글
  • [JAVA] format() 메서드 : 문자열 포맷 지정 / printf()
  • [JAVA] 람다식과 스트림 Stream()
  • [JAVA] 추상 클래스 (abstract class)
  • [JAVA] 상속
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (233)
    • Java (25)
    • Spring (26)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (48)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (6)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • Spring
  • web
  • 백엔드공부
  • 클린코드
  • Redis
  • Redisson
  • HTTP
  • cleancode
  • Java
  • mybatis
  • Linux
  • 리눅스
  • Nuxt3
  • 백엔드스쿨
  • SQL
  • SpringBoot
  • 제로베이스
  • vue3
  • Database
  • 백준
  • springsecurity
  • 자료구조
  • 트랜잭션
  • 기술면접
  • JPA
  • 개발자
  • 백엔드기술면접
  • MySQL
  • TechInterview
  • 백엔드

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[JAVA] 파일 입출력
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.