< IO 입출력 클래스 > - java.io.
[ Input 입력의 방법 ]
- args[명령형매개변수] 이용하는 방법
실행하기전에 다 넣어놔야함. (프로그램 실행 중간에 넣을 수 없음)
- 난수 도 하나의 방법
[ IO클래스 이용 => 입출력 ]
키보드 / 모니터 - System.in/System.out
메모리 (java.io) - BuffuredReader/Writer
=> 속도측면에서 메모리를 사용한 입출력이 뛰어난 성능을 보인다.
( 데이터가 많을 수록, 차이가 더 심해진다. )
java.io.50여개
1. InputStream / OutputStream 클래스 => 단위 1byte씩 ( BYTE 스트림 )
(Stream = 데이터의 연속흐름)
- read( )메소드 - 키보드 하나 입력만 읽어옴
- write( )메소드 - 키보드 하나씩만 출력 (1바이트씩)
- 다국어 지원 X ( 1BYTE 의 한계 )
- 영문자는 가능 (1BYTE)
- jpg 이미지파일 o
- mp3 음향파일 o
2. Reader / Writer 클래스 => 단위 2byte씩 (문자 스트림) -
( Stream 클래스들이랑 거의 똑같다. 메소드도 똑같다. BYTE 크기 차이 )
- 다국어 지원 가능
- read( ) 데이터 2BYTE 단위로 입력
- write( ) 데이터 2BYTE 단위로 출력 => String 가능 (1개문자2Byte)
- close( ) 문닫기 잊지말자!
=> IO 공통메소드 - finally 와 함께 사용해서 블록 처리
"다 사용했어요 닫아주세요! "
3. Scanner 클래스 ( 애는 io 계열은 아니고, java.util 계열인데 대놓고 IO기능을 한다. )
<기본사용법>
Scanner sc = new Scanner( "읽어올거" );
Scanner sc = new Scanner(System.in); => 키보드로 읽어온걸 스캐너에 넣겠다.
- 읽어올거, 즉 입력만 넣을 수 있다. ( 출력 X )
=> System.in / InputStream / reader
Scanner sc = new Scanner(new FileInputStream( " " ) );
Scanner sc = new Scanner(new FileReader( " " ) );
Scanncer sc = new Sacnner( fr ); //객체만들어놨으면 객체로 넣고
이런 입력 하는것들을 Scanner 객체에 담아서
Scanner 클래스의 메소드들을 사용할 수 있게 만드는 것.
< Scanner 메소드 >
nextInt( ) =>읽어온것의 다음 int
next( ) => 읽어온것의 다음 String // 띄어쓰기로 구분 //
nextLine( ) => 읽어온것의 다음 String 인데 한줄통째로 // 엔터로 구분 //
hasNextInt( ) => 읽어온것 다음 int 있나 Boolean
hasNext( ) => 읽어온것 다음 String 있나 Boolean
hasNextLine( ) => 읽어온것 다음 String (줄단위) 있나 Boolean
이 메소드들을 사용해서 기본적인 패턴이
Scanner sc = new Scanner(System.in);
while( sc.hasNext( ) ) {
System.out.println( sc.next( ) ); }
스캐너에 담긴 입력값에 ( sc )
다음 데이터가 있다면 ( hasNext )
다음 데이터를 출력해줘 ( next )
이게 스캐너의 정형화된 사용법이다.
스캐너의 메소드를 사용하면
1. int, String, String(줄) ,double 등 데이터 타입별로 입력값을 구분해서 사용할 수 있다.
2. hasNext / next 를 이용해서 입력값을 처음부터 끝까지 싹 뽑을 수 있다.
어떻게 어떻게 하면 스캐너 없이도 할 수 있지만,
매우 불편할 과정을 스캐너의 기능이 편리하게 만들어 준다.
- SourceStream 보조스트림
Scanner처럼 데이터타입 변환 / 한글 변환 등등 역할을 해주는 보조스트림들이
DataInputStream / out
BufferedInput/Outputstream
BufferedReader/Writer (애는 좀 눈여겨 봐두고 익혀둬야한다)
이런게 있는데
=> Scanner 도이런 역할은 다 해낼 수는 있다. 속도성능차이
< next 와 nextLine >
- Scanner 는 기본적으로 스페이스(공백) 으로 입력당 구분이 된다.
- 띄어쓰기를 구분으로 인식
- 10 20 숫자의 경우 띄어쓰기를 했다면, 10 의 next 가 20 이 된다.
- 마찬가지로 String도 java program 두 단어사이에 띄어쓰기를 했다면 next 로 구분된다.
예외 - nextLine
String s = sc.nextLine( ) => 1줄을 통째로 String에 입력한다.
- 띄어쓰기도 하나로 인식
- 엔터를 구분으로 인식
동해물과 백두산이 마르고 닳도록 <= 이 한줄을 통째로 String취급
( - nextLine 사용시 주의 : 전 입력에서 엔터로 구분한게 있고, 바로 nextLine을 사용하면
전 입력에서 엔터로 구분한게 여기에 적용되버려서 제대로 작동 안할 수 있다.
=> scanner.nextLine( ); 하나 쌩으로 줘서 한줄을 넘기고
새로 nextLine( ) 을 써주는 방법이 있음을 인지하고 있자. )
public class Scanner_ {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String c = scanner.next();
String d = scanner.next();
System.out.println(c + d);
scanner.nextLine(); // 이걸로 한줄 넘기는 것
String e = scanner.nextLine();
System.out.println(e);
}
}
'Back to the Java' 카테고리의 다른 글
File 클래스 => 파일/디렉토리 정보제공 (0) | 2022.07.08 |
---|---|
파일 입출력 클래스 / FileInput/OutputStream / FileReader/FileWriter (0) | 2022.07.08 |
Lambda 식 ( ) -> { }; (0) | 2022.07.07 |
Generic < T > 제너릭 (0) | 2022.07.07 |
Collection Framework => ArrayList / HashSet / HashMap (0) | 2022.07.07 |