▶ System.in 필드
자바는 콘솔에서 키보드의 데이터 입력을 받을 수 있도록 System 클래스의 in 정적 필드를 제공한다.
복습) System 클래스 : JVM이 운영체제의 일부 기능을 사용할 수 있게 하는 클래스
정적 필드 : 객체 생성 없에 클래스의 이름으로 사용할 수 있는 필드
System.in은 InputStream 타입 객체이므로, 바이트 기반 입력 스트림으로서의 역할을 할 수 있다.
▷ System.in으로 키보드에서 줄 단위로 입력받기
System.in 필드를 InputStream변수에 저장한다.
이렇게 만들어진 바이트 기반 입력 스트림 객체를 문자 입력 스트림으로 변환하기 위해 InputStreamReader을 사용한다.
마지막으로, 엔터를 기준으로 읽어오기 위해 BufferedReader 클래스의 readLine을 사용한다.
InputStream is = System.in; // System.in 필드로 InputStream 객체 생성
Reader reader = new InputStreamReader(is); // 문자 기반 입력 스트림으로 변환
BufferedReader br = new BufferedReader(reader); // readLine 사용하기 위해 Buffered 스트림 사용
String lineStr = br.readLine( ); // 줄 단위로 입력
▶ System.out 필드
키보드로 입력받은 테이터를 모니터로 출력하기 위해 System.out 필드를 사용한다.
System.out은 PrintStream 클래스의 객체이므로
PrintStream에서 제공하는 print( ), println( ), printf( ) 등의 메소드를 사용하여 모니터에 출력할 수 있다.
정리 :
System.in : 키보드에서 콘솔로 입력받게 하는 필드 (타입 : InputStream - 바이트 기반 입력 스트림 객체)
System.out : 콘솔에서 모니터로 출력하게 하는 필드 (타입 : PrintStream - 바이트 기반 출력 보조 스트림 객체)
▶ Scanner 클래스
입출력 스트림도 아니고 보조 스트림도 아니지만, 문자열 입력을 쉽게 받게 하기 위해 자바에서 제공하는 클래스이다.
스트림이 아니므로 java.io에 있지 않고 java.util 에서 import 할 수 있다.
[Scanner로 입력받는 방법]
import java.util.*;
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine( );
▶ File 클래스
java.io 패키지에서 제공하며, 파일 및 폴더의 정보를 제공해주는 역할을 한다.
파일의 내부가 아니라 껍데기를 다룬다고 생각하면 된다. (Class 클래스와 비슷한 역할!)
File 클래스의 객체를 생성하려면 문자열 경로를 매개값으로 줘야 한다.
이때 문자열 경로의 경로 구분자는 운영체제마다 조금씩 다른데, 윈도우에서는 \\ 또는 / 를 사용한다.
Q. 이걸 왜 입출력 API에서 다루는거지?🤔
이렇게 객체를 만들어진 File 객체는 단독으로 사용될 수도 있지만,
파일 입출력 스트림의 생성자에 매개값으로 전달되어 파일 경로 정보를 제공할 수도 있다.
주의할 점!
문자열 경로에 해당하는 파일이나 폴더가 없다고 해서, File클래스에서 이를 자동으로 생성해주는 것은 아니다.
따라서 File 클래스의 객체에 접근해서 정보를 얻으려 하면,
먼저 해당 경로에 파일이 존재하는지를 exist 메소드로 확인해야 한다.
exist( ) 메소드는 파일 존재 유무를 boolean으로 리턴해준다.
헷갈림 정리
System.in과 System.out의 정체
System.in과 System.out은 모두 스트림 객체이다.
스트림은 자바에서 입출력을 가능하게 하는 바이트의 흐름이다.
자바 import 헷갈림 정리
java.lang : 임포트할 필요 없음 (Ex. Math, System, String, Object, Class, Wrapper 등)
java.util : Scanner, 모든 컬랙션 프레임워크 (List, Set, Map, Queue, Stack)
java.io : 입출력과 관련된 모든 스트림 + File 클래스 / 입출력 스트림을 사용할거면, 동시에 IOException에 대한 예외처리도 해야한다.
Scanner와 BufferedReader
Scanner은 nextLine으로 줄을 읽어오고, BufferedReader는 readLine으로 줄을 읽어온다.
'JAVA > 혼공자' 카테고리의 다른 글
[혼공자] Chapter 14-2 보조 스트림 (1) | 2022.08.22 |
---|---|
[혼공자] Chapter 14-1 입출력 스트림 (2) | 2022.08.21 |
[혼공자] Chapter 13-2 LIFO와 FIFO 컬렉션 (1) | 2022.08.20 |
[혼공자] Chapter 13-1 컬렉션 프레임워크 (1) | 2022.08.19 |
[혼공자] Chapter 12-2 스레드 제어 (1) | 2022.08.17 |