JavaRush /Java Blog /Random-KO /PrintStream 클래스의 용도는 무엇입니까?

PrintStream 클래스의 용도는 무엇입니까?

Random-KO 그룹에 게시되었습니다
안녕하세요! 오늘 우리는 클래스 PrintStream와 클래스가 할 수 있는 모든 것에 대해 이야기하겠습니다. PrintStream 클래스의 용도는 무엇입니까? - 1사실 여러분은 이미 클래스의 두 가지 메서드에 익숙합니다 PrintStream. 이것은 아마도 매일 사용하는 print()및 메소드 입니다. 변수는 객체 이므로 메소드를 호출하면 이 특정 클래스의 메소드를 호출하게 됩니다. 클래스의 일반적인 목적은 일부 스트림에 정보를 출력하는 것입니다. 이 클래스에는 여러 생성자가 있습니다. 가장 일반적인 몇 가지 사항은 다음과 같습니다. println()System.outPrintStreamSystem.out.println()PrintStream
  • PrintStream(OutputStream outputStream)
  • PrintStream(File outputFile) throws FileNotFoundException
  • PrintStream(String outputFileName) throws FileNotFoundException
보시다시피, PrintStream예를 들어 데이터를 출력하려는 ​​파일의 이름을 객체의 생성자에 전달할 수 있습니다. 또는 개체 자체입니다 File. 예제를 통해 이것이 어떻게 작동하는지 살펴보겠습니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Main {

   public static void main(String arr[]) throws FileNotFoundException
   {
       PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));

       filePrintStream.println(222);
       filePrintStream.println("Hello world");
       filePrintStream.println(false);
   }
}
이 코드는 데스크탑에 파일을 생성하고 test.txt(아직 존재하지 않는 경우) boolean거기에 숫자, 문자열 및 -변수를 순차적으로 작성합니다. 프로그램이 실행된 후 파일의 내용은 다음과 같습니다.

222
Hello world!
false
위에서 말했듯이 파일 객체 자체를 전달할 필요는 없습니다 File. 생성자에서 경로를 지정하기만 하면 됩니다.
import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Main {

   public static void main(String arr[]) throws FileNotFoundException
   {
       PrintStream filePrintStream = new PrintStream("C:\\Users\\Username\\Desktop\\test.txt");

       filePrintStream.println(222);
       filePrintStream.println("Hello world");
       filePrintStream.println(false);
   }
}
이 코드는 이전 코드와 동일한 작업을 수행합니다. 살펴볼 또 다른 흥미로운 방법은 printf()형식화된 문자열 출력입니다. "형식화된 문자열"은 무엇을 의미합니까? 설명하기 위해 예를 들어 보겠습니다.
import java.io.IOException;
import java.io.PrintStream;

public class Main {

   public static void main(String[] args) throws IOException {

       PrintStream printStream = new PrintStream("C:\\Users\\Евгений\\Desktop\\test.txt");

       printStream.println("Hello!");
       printStream.println("I'm robot!");

       printStream.printf("My name is %s, my age is %d!", "Amigo", 18);

       printStream.close();

   }
}
여기서는 로봇의 이름과 나이를 한 줄로 명시적으로 적는 대신 포인터 %s와 를 사용하여 이 정보를 위한 "여유 공간"을 남겨두는 것 같습니다 %d. 그리고 우리는 이 위치에 있어야 할 데이터를 매개변수로 전달합니다. 우리의 경우 이것은 문자열 " Amigo "이고 숫자 18입니다. 예를 들어, 또 다른 공백을 생성 %b하고 다른 매개변수를 전달할 수 있습니다. 그것은 무엇을 위한 것입니까? 우선 유연성을 높이기 위해서다. 프로그램에서 환영 메시지를 자주 표시해야 하는 경우 각 새 로봇에 필요한 텍스트를 수동으로 입력해야 합니다. 이 텍스트를 상수에 넣을 수도 없습니다. 모든 사람의 이름과 나이가 다릅니다! 그러나 새로운 방법을 사용하면 상수에 대한 인사말이 포함된 문자열을 출력할 수 있으며, 필요한 경우 간단히 메서드의 매개변수를 변경하면 됩니다 printf().
import java.io.IOException;
import java.io.PrintStream;

public class Main {

   private static final String GREETINGS_MESSAGE = "My name is %s, my age is %d!";

   public static void main(String[] args) throws IOException {

       PrintStream printStream = new PrintStream("C:\\Users\\Евгений\\Desktop\\test.txt");

       printStream.println("Hello!");
       printStream.println("We are robots!");

       printStream.printf(GREETINGS_MESSAGE, "Amigo", 18);
       printStream.printf(GREETINGS_MESSAGE, "R2-D2", 35);
       printStream.printf(GREETINGS_MESSAGE, "C-3PO", 35);

       printStream.close();
   }
}

System.in 스푸핑

이번 강의에서 우리는 "시스템과 싸우고" 변수를 대체하고 System.in시스템 출력을 필요한 곳으로 리디렉션하는 방법을 배웁니다. - 2의 PrintStream 클래스는 무엇입니까?당신은 그것이 무엇인지 잊어버렸을 수도 System.in있지만, JavaRush 학생은 이 구성을 결코 잊지 않을 것입니다:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in(like System.out)는 정적 클래스 변수입니다 System. 그러나 와 달리 System.out다른 클래스, 즉 에 속합니다 InputStream. 기본적으로 System.in이는 시스템 장치(키보드)에서 데이터를 읽는 스레드입니다. 그러나 의 경우와 마찬가지로 System.out데이터 소스를 교체할 수 있으며 키보드가 아닌 필요한 곳에서 읽기가 발생합니다! 예를 살펴보겠습니다:
import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException {

       String greetings = "Hello! Меня зовут Амиго!\nЯ изучаю Java на сайте JavaRush.\nОднажды я стану крутым программистом!\n";
       byte[] bytes = greetings.getBytes();

       InputStream inputStream = new ByteArrayInputStream(bytes);

       System.setIn(inputStream);

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

       while ((str = reader.readLine())!= null) {

           System.out.println(str);
       }

   }
}
그래서 우리는 무엇을 했나요? 일반적으로 System.in키보드에 "묶여" 있습니다. 하지만 우리는 키보드에서 데이터를 읽는 것을 원하지 않습니다. 일반 텍스트 줄에서 데이터를 읽도록 하세요! 문자열을 생성하여 바이트 배열로 받았습니다. 왜 바이트가 필요한가요? 사실 이는 InputStream추상 클래스이므로 인스턴스를 생성할 수 없습니다. 상속인 중에서 특정 클래스를 선택해야 합니다. 예를 들어, ByteArrayInputStream. 이는 간단하며 이름만 봐도 작동 방식이 분명합니다. 데이터 소스는 바이트 배열입니다. 그래서 우리는 이와 동일한 바이트 배열을 생성하고 이를 생성자에 전달하여 stream데이터를 읽습니다. 사실 모든 것이 이미 준비되어 있어요! System.setIn()이제 변수의 값을 명시적으로 설정하는 메서드를 사용하기만 하면 됩니다 in. 기억하시는 것처럼 의 경우에는 out변수 값을 설정하는 것이 분명히 불가능했습니다. 특별한 방법을 사용해야 했습니다 setOut(). InputStream우리가 만든 변수를 할당한 후에 System.in는 아이디어가 효과가 있는지 확인해야 합니다. 오랜 친구가 우리를 도와줄 것입니다 BufferedReader. 일반적인 상황에서 이 코드를 사용하면 Intellij IDEa에서 콘솔이 열리고 키보드에서 입력한 데이터가 거기에서 읽혀집니다.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

       String str;

       while ((str = reader.readLine())!= null) {

           System.out.println(str);
       }
그러나 지금 실행하면 프로그램의 텍스트가 단순히 콘솔에 출력되고 키보드에서 읽을 수는 없다는 것을 알 수 있습니다. 데이터 소스를 변경했습니다. 이제는 키보드가 아니라 문자열입니다! 너무 쉽고 간단해요 :) 오늘 강의에서 우리는 새로운 클래스에 대해 알게 되었고 I/O 작업을 위한 새로운 작은 "해킹"을 살펴보았습니다. 강좌로 돌아가서 몇 가지 문제를 풀어볼 시간입니다 :) 다음 강의에서 만나요!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION