자바에서 파일에 포함된 특정 텍스트나 문자열을 삭제하려면 BufferedReader와 BufferedWriter를 활용할 수 있습니다. 기본 원리는 원본 파일을 한 줄씩 읽어가면서 삭제 대상과 일치하는 줄은 건너뛰고, 나머지 내용을 임시 파일에 기록한 후 임시 파일의 이름을 원본 파일명으로 변경하는 방식입니다.
예제 코드
File input_file = new File("path to the .txt file");
File temp_file = new File("path to the .txt file");
BufferedReader my_reader = new BufferedReader(new FileReader(input_file));
BufferedWriter my_writer = new BufferedWriter(new FileWriter(temp_file));
String lineToRemove = "string to remove";
String current_line;
while((current_line = my_reader.readLine()) != null) {
String trimmedLine = current_line.trim();
if(trimmedLine.equals(lineToRemove)) continue;
my_writer.write(current_line + System.getProperty("line.separator"));
}
my_writer.close();
my_reader.close();
boolean is_success = temp_file.renameTo(input_file);실행 결과
입력 파일에서 지정한 문자열이 성공적으로 삭제됩니다.
코드 동작 방식
먼저 입력 파일(input_file)과 임시 파일(temp_file) 두 개의 File 객체를 생성합니다. 이후 각각 BufferedReader 인스턴스와 BufferedWriter 인스턴스를 만들어 파일을 읽고 쓸 준비를 하며, 삭제할 문자열을 lineToRemove 변수에 정의합니다.
그다음 while 반복문으로 입력 파일을 한 줄씩 순회합니다. 이때 앞뒤 공백을 제거한 줄(trimmedLine)이 삭제 대상 문자열과 일치하면 continue를 통해 해당 줄을 건너뛰어 결과적으로 삭제 효과를 얻습니다. 일치하지 않는 줄은 그대로 임시 파일에 기록되며, 운영체제에 맞는 줄바꿈 문자가 함께 추가됩니다.
모든 줄의 처리가 끝나면 라이터와 리더를 닫아 자원을 해제하고, 마지막으로 renameTo() 메서드를 사용해 임시 파일의 이름을 원본 파일명으로 변경합니다. 이 작업이 성공하면 원본 파일에서 해당 문자열이 삭제된 최종 결과를 얻게 됩니다.
참고 사항
실제 프로젝트에서는 IOException을 처리하기 위해 try-catch 블록을 사용하고, try-with-resources 문법으로 리더와 라이터를 자동으로 닫아주는 것이 좋습니다. 또한 equals() 대신 contains()를 사용하면 줄 전체가 아니라 부분 문자열만 포함된 줄도 삭제할 수 있습니다.