• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

new FileWriter() 랑 new File() 차이점이 뭔가요?

23.03.11 21:56 작성 조회수 959

0

 앞에 파일 다루기 강의에서는 파일 생성할때

new File() 로 파일을 만들었는데

이번 강의에서는 new FileWriter() 로 파일을 만드는 이유가 뭘까요?

답변 1

답변을 작성해보세요.

0

안녕하세요?
자바에서는 파일 관련한 여러 클래스가 제공되는데 그 중에서 File 은 파일 생성, 삭제, 수정 또는 파일의 정보를 얻어오는 등 목적으로 사용될 수 있으며, FileWriter 는 파일에 어떤 내용을 쓰는데 사용될 수 있습니다.

File file = new File("sample.txt");
if (file.exists()) {
    System.out.println("파일이 존재합니다");
} else {
    System.out.println("파일이 존재하지 않습니다");
}
try {
    FileWriter writer = new FileWriter("sample.txt");
    writer.write("이 문장을 파일에 적어주세요");
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

파일 다루기 편에서는 파일을 만들고 정보를 얻어오는 작업, 그리고 파일이 존재하는지 여부를 확인하기 위한 방법을 안내하기 위해 File 을 사용하였습니다. 파일 읽고 쓰기 편에서는 파일에 내용을 쓰기 위해 FileWriter 를 사용하였습니다. 그리고 BufferedWriter 는 임시 공간인 버퍼를 이용하여 많은 내용을 보다 효율적으로 저장할 때 사용되는데 파일에 내용을 쓰는 것이 목적이므로 FileWriter 와 함께 사용될 수 있지만 File 과는 함께 사용될 수 없습니다.

BufferedWriter 부분을 Ctrl + 마우스 클릭 해보시면 다음과 같은 코드를 확인하실 수 있어요.

public BufferedWriter(Writer out) {
    this(out, defaultCharBufferSize);
}

보시는 것처럼 전달값으로 Writer 객체를 받고 있습니다. 그리고 FileWriter 를 Ctrl + 마우스 클릭 해보시면 클래스 정의하는 부분이 다음처럼 되어 있는 것을 알 수 있는데요.

public class FileWriter extends OutputStreamWriter { ... }

여기서 OutputStreamWriter 부분을 다시 Ctrl + 마우스 클릭 해보시면 최종적으로 Writer 클래스를 상속하는 자식 클래스라는 것을 확인할 수 있습니다.

public class OutputStreamWriter extends Writer { ... }

결국 BufferedWriter 객체를 생성할 때 함께 사용한 FileWriter 객체는 Writer 클래스의 자식 클래스이므로 문제 없이 사용이 가능하지만 File 객체는 Writer 클래스를 상속하지 않으므로 사용이 불가능합니다. 궁금증 해결에 도움되시길 바라겠습니다 😊
감사합니다.