UTF-8 텍스트 파일을 쓰고 읽으면서 자원이 자동으로 닫히는 흐름을 익힙니다.
Path는 파일의 위치를 나타내고 Files는 파일을 열거나 삭제하는 메서드를 제공합니다. 반면 BufferedWriter와 BufferedReader는 운영체제의 파일 자원과 버퍼를 사용하므로 작업이 끝나면 닫아야 합니다. 두 객체를 try-with-resources 괄호 안에서 만들면 정상 종료뿐 아니라 읽기·쓰기 중 예외가 발생해도 자동으로 닫힙니다. 웹 실습에서 만든 파일은 브라우저 실행 환경의 임시 공간에만 저장됩니다.
Files.createTempFile은 java.io.tmpdir가 가리키는 임시 폴더에 java-study-로 시작하고 .txt로 끝나는 빈 파일을 만들며, 가운데에 자동으로 만든 문자열을 넣어 이름이 겹치지 않게 합니다. 읽기 반복문의 조건 (line = reader.readLine()) != null은 한 줄을 읽어 line에 넣는 일과 파일 끝 검사를 한 번에 하고, readLine은 줄바꿈 문자를 뺀 내용만 돌려줍니다.
첫 번째 try 블록을 벗어날 때 writer가 닫히면서 남은 내용이 파일에 반영됩니다. 그다음 reader가 readLine으로 한 줄씩 읽고 두 번째 블록을 벗어날 때 닫힙니다. Path와 Files 자체는 닫는 자원이 아니며 마지막 finally는 임시 파일을 삭제합니다.
작은 파일은 Files.readAllLines으로 간단히 읽을 수 있지만 전체 내용을 메모리에 올립니다. 크기를 예측하기 어려운 파일은 BufferedReader로 한 줄씩 처리하고, 업로드 파일은 허용 디렉터리·크기·형식을 검증한 뒤 무작위 저장 이름을 사용합니다.
닫기 작업을 정상 흐름의 마지막 줄에만 두면 중간에 IOException이 발생했을 때 실행되지 않습니다. 파일을 닫기 전에 삭제하거나 Path를 try-with-resources에 넣으려고 하지 마세요.
직접 바꿔보세요세 번째 학습 기록을 writer로 추가하고, reader가 읽은 줄 수를 마지막에 출력하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.