"Hello, Amigo! 어제 Rishi는 FileInputStreamFileOutputStream 에 대해 설명했습니다 . 그리고 오늘은 FileReaderFileWriter 클래스 에 대해 설명하겠습니다 ."

이미 짐작하셨겠지만 이 모든 클래스는 File 객체와 InputStream , OutputStream , ReaderWriter «인터페이스» 사이의 어댑터입니다.

"파일과 판독기/작성기 사이의 어댑터와 비슷하지만 파일이 아닌 문자열 개체만 생성자에 전달하면 됩니다!"

"실제로 여러 생성자가 있습니다. File 및 String 개체 모두에 대한 생성자가 있습니다. String 개체를 생성자에 전달하면 생성자는 전달된 String 개체에서 가져온 파일 경로를 사용하여 File 개체를 자동으로 생성합니다."

이는 편의를 위한 것입니다. Java 작성자는 이러한 클래스에 대해 가장 빈번한 사용 사례를 선택하고 모든 클래스에 대한 생성자를 작성했습니다. 꽤 편리하다고 생각하지 않습니까?

"아, 네. 편리합니다. 동의합니다. 그런데 왜 계속해서 다음과 같이 작성해야 합니까?"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
"이 사용 사례를 추가하지 않은 이유는 무엇입니까?"

"여기서 문제는   일반적인 Java 프로그램이 콘솔에서 작동하지 않는다는 것입니다. 사실 웹 서버, 애플리케이션 서버 또는 기타 복잡한 시스템에서도 거의 아무 것도 읽을 수 없습니다."

그러나 데이터와 텍스트를 콘솔에 출력하기 위한 PrintStream이 있습니다. 이러한 «서버 응용 프로그램»은 종종 콘솔을 사용하여 상태, 오류 및 기타 모든 종류의 정보를 표시하기 때문입니다.

"알겠습니다. 그리고 FileReader와 FileWriter를 사용하여 파일을 복사할 수도 있습니까?"

"예, 텍스트 파일(즉, 문자로 구성된 파일)인 경우. 예를 들면 다음과 같습니다."

디스크에 파일 복사
public static void main(String[] args) throws Exception
{
 FileReader reader = new FileReader("c:/data.txt");
 FileWriter writer = new FileWriter("c:/result.txt");

 while (reader.ready()) //as long as there are unread bytes in the input stream
 {
  int data = reader.read(); //Read one character (the char will be widened to an int)
  writer.write(data); //Write one character (the int will be truncated/narrowed to a char)
 }

 //Close the streams after we done using them
 reader.close();
 writer.close();
}

"거의 차이가 없습니다."

"예, 그 차이는 미미합니다."