자바에서 데이터는 Stream을 총해 입출력된다.
스트림은 FIFO 형식으로 단일 방향으로 연속적으로 흘러간다.
위치에 따라 달라진다.
java.io 패키지에는 여러가지 종류의 스트림 클래스를 제공하고 있다.
크게 2가지 종류로 구분된다.
📝구별하는 방법은 최상위 클래스를 보면 된다.
InputStream 클래스를 상속받아서 만들어진다.
OutputStram 클래스를 상속받아서 만들어진다.
Readr 클래스를 상속받아서 만들어진다.
Writer 클래스를 상속받아서 만들어진다.
package io;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class IoTest {
public static void main(String[] args) throws Exception {
//console과 file을 통한 입력
//1. console을 통한 입력 (예전 방식)
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(in); //속도 조절
System.out.print("이름은 ");
String ir = br.readLine(); //Unhandled exception type IOException //예외처리
System.out.println("이름은 " + ir);
br.close();
in.close();
}
}
package pack5io;
import java.io.BufferedReader;
import java.io.InputStreamReader; //scanner가 없을때
import java.util.Scanner;
public class Ex34IoTest {
public static void main(String[] args) throws Exception {
//console과 file을 통한 입력
//scnner 클래스
Scanner scanner = new Scanner(System.in);
System.out.print("이름은");
String ir= scanner.nextLine();
System.out.print("몸무게는");
double w = scanner.nextDouble();
System.out.println(ir+"님의 몸무게는 "+w);
scanner.close();
}
}
파일을 가져올때 반드시 저작권에 주의하자.
나라에서 제공하는 정보인 공공 데이터포털이 있다.
https://www.data.go.kr/
다양한 데이터들이 존재하는데, 전국 도서관 정보를 가져와보자.
(다른 데이터여도 상관없다.)
전국 도서관 표준데이터 검색 > csv를 다운 >
엑셀 파일이 다운로드 되었을 거다.
해당 파일을 메모장으로 열어보자.
메모장에는 csv 파일답게 데이터들이 ,(쉼표)로 되어있을 것이다.
(공공데이터이지만 혹시 몰라 색칠했다.)
중요한 것은 하단에 UTF-8로 되어 있는지 확인하는 것이다.
만약 UTF-8로 저장되지 않는다면
상단파일
> 다른이름으로 저장 > utf-8로 설정
위의 사진처럼 다시 저장을 해주면 된다 (덮어쓰기 OK)
System.out.println("전국 도서관 정보 파일 일부 읽기 =--=-=-=-=");
//파일위치를 알려준다.
File file = new File("c:/work/전국도서관표준데이터.csv");
//파일에서 입력을 받는다.
FileReader fr2 = new FileReader(file);
BufferedReader br2 = new BufferedReader(fr2);
int count = 0;
//한 줄씩 값을 읽고 객체에 전달한다.
String ss = br2.readLine();
while (true) {
count++;
ss = br2.readLine();
if (ss == null || count >= 10)
break;
//받은 파일을 ,(쉼표)단위로 잘라 입력해준다.
StringTokenizer tok = new StringTokenizer(ss, ",");
String s1 = tok.nextToken();
String s2 = tok.nextToken();
String s3 = tok.nextToken();
String s4 = tok.nextToken();
System.out.println(s1 + "\t" + s2 + "\t" + s3 + "\t" + s4);
}
System.out.println("건수: " + count);
: Scanner와 유사gkek
Scanner보다 속도가 훨씬 빠르다.
왜냐하면 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성이 높인다.
BufferedReader는 많은 양의 데이터를 처리할 때 유리하다.