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