본문 바로가기

WINK-(Web & App)/JAVA 스터디

[2024-2 Java 스터디] 김태일 #5주차 "자바의 입출력"

반응형

06. 자바의 입출력

06-1 콘솔 입출력

- 콘솔 출력 : 사용자에게 문자열을 보여 주는 것

- 콘솔 입력 : 출력된 질문에 사용자가 답변을 입력하는 것

 

1. 콘솔 입력

- System.in 을 사용

import java.io.IOException;
import java.io.InputStream;   //InputStream 임포트

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;      

        int a;
        a = in.read();     //read 메서드를 통해 int 자료형으로 저장

        System.out.println(a);
    }
}

 

1-1 InputStream

- 입력 스트림 : 바이트(byte) 단위의 데이터를 읽어 들일 때 사용하는 내장 클래스

import java.io.IOException;
import java.io.InputStream;

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;

        byte[] a = new byte[3];     //인덱스로 접근 가능(abc 입력)
        in.read(a);      

        System.out.println(a[0]);   //97
        System.out.println(a[1]);   //98
        System.out.println(a[2]);   //99
    }
}

 

1-2 InputStreamReader

- InputStreamReader : byte 대신 문자로 입력 스트림을 읽음

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in);  //InputStreamReader 객체 생성
        char[] a = new char[3];  // a = 입력한 값 세글자
        reader.read(a);        

        System.out.println(a);    //abc
    }
}

 

1-3 BufferedReader

- BufferedReader : 길이에 상관없이 사용자가 입력한 값을 받아들임

import java.io.IOException;
import java.io.BufferedReader;     //BufferedReader 임포트
import java.io.InputStream;
import java.io.InputStreamReader;

public class Sample {
    public static void main(String[] args) throws IOException {
        InputStream in = System.in;
        InputStreamReader reader = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(reader);  //객체 생성

        String a = br.readLine();            //readLine 메서드를 통해 문자열 읽음
        System.out.println(a);
    }
}

 

1-4 Scanner

- System.in 객체를 통해 입력을 할 수 있음

import java.util.Scanner;  //Scanner 클래스 임포트

public class Sample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);   //객체 생성
        System.out.println(sc.next());      //next() 메서드를 통해 토큰 읽음
    }
}
  • next() 메서드를 통해 숫자, 문자열 등을 읽어들일 수 있음. 그중 일부만 표를 통해 확인
next() 메서드 설명
next 토큰을 읽어들임
nextLine 라인을 읽어들임
nextInt 정수를 읽어들임

 

2. 콘솔 출력

- PrintStream : 콘솔에 값을 출력할 때 사용되는 클래스

- System.out : PrintStream 클래스의 객체(콘솔에 문자열을 출력 or 디버깅 할 때 사용)

- System.err : 오류 메시지를 출력

 

 

06-2 파일 입출력

1. 파일 쓰기

1-1 FileOutputStream

- FileOutputStream 클래스를 사용하여 파일 생성

import java.io.FileOutputStream;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        FileOutputStream output = new FileOutputStream("c:/out.txt");  //c:/ 디렉터리 바로 밑에 새로운 파일 out.txt가 생성
        output.close();  //사용한 파일 객체를 닫아 주기 위한 코드
    }
}

 

- write를 통해 내용 입력

import java.io.FileOutputStream;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        FileOutputStream output = new FileOutputStream("c:/out.txt");
        for(int i=1; i<11; i++) {
            String data = i+" 번째 줄입니다.\r\n";
            output.write(data.getBytes());  // byte 단위로 써야하므로 getBytes()메서드 이용
        }
        output.close();
    }
}

 

1-2 FileWriter

- FileWriter : byte배열 대신 문자열 사용 가능

import java.io.FileWriter;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("c:/out.txt");
        for(int i=1; i<11; i++) {
            String data = i+" 번째 줄입니다.\r\n";
            fw.write(data);  // getBytes메서드 없이 작성 가능
        }
        fw.close();
    }
}

 

1-3 PrintWriter

- PrintWriter : \r\n 붙이는 대신 println 메서드 사용 가능

 

1-4 파일에 내용 추가하기

- 두번째 파라미터를 boolean 입력 파라미터로 파일을 추가 모드로 열 것인지 구분

import java.io.FileWriter;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("c:/out.txt");
        for(int i=1; i<11; i++) {
            String data = i+" 번째 줄입니다.\r\n";
            fw.write(data);
        }
        fw.close();

        FileWriter fw2 = new FileWriter("c:/out.txt", true);  // true를 통해 파일을 추가 모드로 연다.
        for(int i=11; i<21; i++) {
            String data = i+" 번째 줄입니다.\r\n";
            fw2.write(data);
        }
        fw2.close();
    }
}

 

2. 파일 읽기

- FileInputStream 클래스를 이용해 파일 읽기

import java.io.FileInputStream;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        byte[] b = new byte[1024];
        FileInputStream input = new FileInputStream("c:/out.txt");
        input.read(b);
        System.out.println(new String(b));  // byte 배열을 문자열로 변경하여 출력
        input.close();
    }
}

 

2-1 한줄 단위로 파일 읽기

- FileReader와 BufferedReader의 조합을 사용해 한 줄 단위로 파일 읽기 가능

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Sample {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("c:/out.txt"));
        while(true) {
            String line = br.readLine();
            if (line==null) break;  // 더 이상 읽을 라인이 없을 경우 while 문을 빠져나간다.
            System.out.println(line);
        }
        br.close();
    }
}

 

 

객관식 문제

1. Java에서 표준 출력에 사용되는 클래스는 무엇인가요?

답 : B) System

 

2. System.out.println()에서 println의 역할은 무엇인가요?

답 : B) 화면에 내용을 출력한다

 

3. Java의 입출력 클래스 중 버퍼를 사용하여 효율적인 입출력을 제공하는 클래스는 무엇인가요?

답 : B) BufferedReader

 

4. 파일에 텍스트를 쓰기 위해 가장 많이 사용되는 클래스는?

답 : B) FileWriter

 

5. Java의 Scanner 클래스는 어떤 패키지에 속해있나요?

답 : B) java.util

 

6. 다음 중 System.out.println()에서 out의 역할은 무엇인가요?

답 : B) 표준 출력 스트림

 

7. 파일에서 데이터를 읽어오는 대표적인 클래스는 무엇인가요?

답 : A) FileReader

 

8. Java의 BufferedWriter 클래스는 어떤 기능을 제공하나요?

답 : D) 텍스트를 버퍼에 쓰고 출력 성능을 향상시킨다.

 

9. InputStream클래스의 역할은 무엇인가요?

답 : B) 데이터를 입력받는다.

 

10. FileReader와 FileWriter의 차이점은 무엇인가요?

답 : B) FileReader는 파일을 읽고, FileWriter는 데이터를 파일에 쓴다.

 

코딩테스트 문제

1. 최소공배수 구하기

https://www.acmicpc.net/problem/13241

 

 

 

2. 커트라인 점수 구하기

https://www.acmicpc.net/problem/25305

 

 

반응형