Seung's Learning Record

[ JAVA ] 표준 입출력 본문

프로그래밍/JAVA

[ JAVA ] 표준 입출력

70_0ewd 2022. 8. 16. 12:30

나는 새로운 언어를 공부할 때, 입출력하는 법부터 공부하는 편이다.

표준 출력하는 법은 그리 어렵지 않아서 쉽게 이해하고 외웠다.

이제 표준 입력하는 법 공부해야지~ 하고 찾아보는데 이게 웬걸..? 블로그마다 설명하는 표준 입력법이 다 다르다ㅋㅋㅋ...

하나하나 다 비교하면서 공부하려다 이러면 외우지도 못하고 머릿속에서 뒤죽박죽이 될것이 분명해서 따로 정리해두기로 결심!  나중되면 손이 기억해서 타다닥 써내려가길 바랄뿐..

 

자바에서는 사용자 요청사항에 대한 응답 메시지를 전달하기 위해 System 이라는 표준 입출력 클래스를 제공한다. 

System 클래스는 다음 세 가지 필드를 가지고 있다.

  • out : PrintStream / 표준 출력 스트림
  • in : InputStream / 표준 입력 스트림
  • err : PrintStream / 표준 에러 출력 스트림

stream은 JAVA의 후반부 내용이어서 아직 정확하게 무엇인지는 모른다..일단은 데이터의 흐름 정도로 알고있자.


표준 출력

System.out()

  • print() : 줄바꿈을 하지 않고 출력
  • println() : 줄바꿈을 해주면서 출력
  • printf() : 지정된 형식의 문자열을 출력
System.out.print("ABCD");
System.out.println("EFGH");
int x = 10;
System.out.printf("%d",x);
//ABCD EFGH
//10

BufferedWriter()

BufferedWrier는 write()명령어를 쓴다고 바로 출력되는 것이 아니라 buffer에 저장해둔뒤 flush나 close될 때 출력 stream에 반영하면서 화면에 출력한다.     

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
 
public class BufferedWriterTest {
    public static void main(String[] args) throws Exception {
    	//객체선언
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        bw.write("Hello World!");
        bw.flush();		//계속 출력하고자 한다면 flush를 사용

        bw.newLine();	//개행 방법1
        bw.write("new line\n");		//개행 방법2
        bw.write(String.valueOf(100));		
        //BufferedWiter를 통해 정수 출력을 하려면 String으로 형변환을 해야함
        bw.close();		//출력을 끝내고자 하면 close를 사용
    }
}
/*
Hello World!
new line
100
*/

표준 입력

System.in은 java.io.* 를 import 해야 사용할 수 있으며 값이 여러방식으로 들어오기 때문에 잘못된 값이 들어온 경우에 에러가 나지 않도록 IOException을 사용하여 예외처리를 필수로 해줘야 한다.

 

System.in.read()

import java.io.*;

public class SystemIn {
	public static void main(String[] args) throws IOException {
    
    	//System.in.read()는 아스키코드로 값을 받기때문에 int형으로 받기 위해선 -48을 해야함.
    	int Num = System.in.read()-48;
        
        //아스키코드에서 char형으로 형변환을 하면 문자열로 입력을 받을 수 있음.
        char Char = (char)System.in.read();
        
        //System.in.read(바이트배열, StartByte, EndByte) -> 바이트배열로 입력값 삽입
        byte[] Byte = new byte[4096];        // Byte배열 선언
        System.in.read(Byte,0,4096);         //배열에 값을 입력
        String StrByte = new String(Byte);   // Byte -> String 전환
        StrByte = StrByte.trim();            //전환 시 Byte배열의 쓰레기데이터를 정리
        
        System.out.println("Number : " + Num);
        System.out.println("Char : " + Char);
        System.out.println("StrByte : " + StrByte);
    }
}
        /*
        입력값 : 9AABCDEFGHIJKLMNOPQRSTUVWXYZ
        Number : 9
        Char : A
        StrByte : ABCDEFGHIJKLMNOPQRSTUVWXYZ
        */

new BufferedReader(new InputStreamReader(System.in)) 

scanner보다 복잡하긴 하지만 효율성이 더 좋아서 실무에서 자주 사용.

import java.io.*;

public class SystemIn {
	public static void main(String[] args) throws IOException {
    	
        //BufferedReader 변수 선언
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        //readLine()을 사용하여 Enter키를 입력하기 전까지의 값을 입력받음.
        String brStr = br.readLine();
        
        //BR은 String변수만 받으므로 Int변수로 변화하려면 Integer.parseInt를 사용해야함.
        int brInt = Integer.parseInt(br.readLine());
        
        System.out.println("brStr : " + brStr);
        System.out.println("brInt : " + brInt);
     }
 }
        /*
        입력값 : ABCDEFGHIJKLMNOPQRSTUVWXYZ 
        	 1234567890
        brStr : ABCDEFGHIJKLMNOPQRSTUVWXYZ 
        brInt : 1234567890
        */

new Scanner(System.in)

import java.io.*;
import java.util.Scanner;

public class SystemIn{
	public static void main(String[] args) throws IOException {
    
    	//System.in을 사용해서 Scanner의 다양한 메서드를 쓰면서 값을 입력받음.
        Scanner sc = new Scanner(System.in);
        
        //next()를 사용하여 Space를 치기 전까지의 값을 입력받음
        String str1 = sc.next();
        
        //nextLine()을 사용하여 Enter()를 치기 전까지의 값을 입력받음
        String str2 = sc.nextLine();
        
        //nextInt()를 사용하여 Enter()를 치기 전까지 숫자값을 입력받음 (문자열 불가)
        int scanInt = sc.nextInt();
        
        System.out.println("str1 : " + str1);
        System.out.println("str2 : " + str2);
        System.out.println("scanInt : " + scanInt);
    }
}
	/* 
        입력값 : ABCDE FGHIJK
        	 1234567890
        str1 : ABCDE
        str2 :  FGHIJK
        scanInt : 123456789
        */

 

이외에도 공부를 하다 알게되는 입출력 방법이 생기면 추후 추가 할 예정!

'프로그래밍 > JAVA' 카테고리의 다른 글

[ JAVA ] StringBuilder - 문자열 더하기  (0) 2022.08.25
[ JAVA ] StringTokenizer()를 사용한 문자열 분리  (0) 2022.08.21
[ JAVA ] 배열 정렬  (0) 2022.08.18
[ JAVA ] 배열  (0) 2022.08.18