System.in
System.out
Scanner
File
14-1, 14-2에서 입출력스트림과 보조 스트림을 배웠는데,
자바 표준 API에서는 이런 스트림들을 이용해서 다양한 기능을 제공한다.
자바는 콘솔에서 데이터 입출력 할 때 System.in과 System.out을 사용하는데
이게 바로 각각 InputStream과 PrintStream타입의 필드이다.
14-3 : 콘솔 입출력시 보조스트림 사용하는 방법, 파일 입출력시 부가적인 정보를 제공해주는 File클래스를 공부하자.
System.in 필드
아아 in 이게 InputStream타입의 필드이다.
(System클래스의 in이라는 정적 필드는 InputStream타입)
>>그래서 System.in은 InputStream 변수로 참조가 가능!
InputStream is = System.in;
ㅇInputStream의 read()메소드 : 키보드로 어떤 키가 입력되었는지 확인 가능
ㄴ1byte를 읽는거였지 (int값 리턴)
int keyCode = is.read();
ㅇ키보드로는 문자를 입력한다 => 문자 입출력은 Reader, Writer가 편리하다고 했었다 (14-2)
입출력 데이터가 문자라면 바이트기반 스트림을 Reader와 Writer로 변환해서 사용할 수 있다고 배웠었다.
>>다음과 같이 해보자.
엔터키 입력 후 라인의 전체 문자열을 읽으려면
○예제 : 반복해서 키보드에서 입력된 문자열을 라인 단위로 읽고 모니터에 출력하기.
System.out 필드
(System.in이 InputStream타입의 필드였고)
System.out은 PrintStream 타입 필드다..!
(System클래스의 out이라는 정적 필드)
>>그래서 PrintStream이 제공하는 print(), println(), printf() 메소드를 이용해 모니터로 출력 가능한 것이다.
Scanner 클래스
입출력스트림 아니다. 보조스트림 아니다.
java.util 패키지에서 제공하는 클래스다 : 입력스트림에서 라인단위 문자열을 쉽게 읽도록 하기 위해 제공!
(위에서 공부했듯이 라인단위로 읽기위해 여러 보조스트림(문자변환보조스트림, 버퍼)을 연결하는 작업이 필요했다.
>>But!! Scanner는 간편히 라인단위 문자열을 읽을 수 있도록
>>nextLine()메소드를 제공하고 있다
<<바이트기반 입력스트립으로부터 scanner생성하기 + 문자열 읽기>>
Scanner scanner = new scanner(System.in)
String inputData = scanner.nextLine();
○예제 : Scanner로 상품정보 키보드 입력 받아 Product객체 생성! + List컬렉션상에서 관리
File 클래스
java.io.File
>>파일 및 폴더(디렉토리) 정보를 제공하는 역할
ㅇFile클래스로부터 File객체 생성하기
=>문자열 경로를 제공해야 한다.
File file = new FIle("C:/Temp/file.txt");
File file = new File("C:\\Temp\\file.txt");
(참고: 경로 구분자는 윈도우에서 /와 \\로 사용 가능)
(작성해준 경로에 실제 파일, 폴더 없어도 예외 발생x)
ㅇFile객체 생성 후
작성했던 경로에 실제 파일, 폴더 있는지 확인 하고 싶으면 : exists() 메소드 호출 고~!
boolean isExist = file.exists();
ㅇ메소드를 통해 파일, 폴더 생성하기
(모두 boolean타입)
createNewFile() : 새로운 파일 생성
mkdir() : 메잌 디렉토리
mkdirs() : 경로상에 없는 모든 디렉토리 생성
ㅇ파일, 폴더 다루는 메소드
리턴타입 | 메소드 | 설명 |
boolean | delete() | 파/폴 삭제 |
boolean | canExecute() | 실행가능한가 (파일) |
boolean | canRead() | 읽을수있는가 (파일) |
boolean | canWrite() | 수정, 저장 가능한가 (파일) |
String | getName() | 파일 이름 리턴 |
String | getParent() | 부모 폴더 리턴 |
File | getParentFile() | 부모폴더를 File객체로 생성후 리턴 |
String | getPath() | 전체경로 리턴 |
boolean | isDirectory() | 폴더인가 아닌가 |
boolean | isFile() | 파일인가 아닌가 |
long | isHidden() | 숨김파일인가 |
long | length() | 파일크기 리턴 |
String[] | list() | String 배열로 리턴 폴더 아래 파일, 서브폴더 목록을 |
String[] | list(FilenameFilter filter) | String 배열로 리턴 폴더 아래 파일, 서브폴더 목록 중 FilenameFilter에 맞는 것만 |
File[] | listFiles() | File배열로 리턴 폴더 아래 파일 및 서브폴더 전부 |
FIle[] | listFiles(FilenameFilter filter) | File배열로 리턴 폴더 아래 파일, 서브폴더 목록 중 FilenameFileter에 맞는 것만 |
○예제 : File클래스를 이용한 파일, 폴더 정보 출력
C:/Temp 폴더에 images폴더와 file1.txt, file2.txt, file3.txt 파일 생성하기
Temp폴더에 있는 파일 목록 출력하기
ㄴ이렇게 파일,폴더 정보 얻을 때 File객체를 생성해 활용할 수 있다.
++이런 용도로도 가능!
파일 입출력 스트림 객체를 생성할 때
(FileInput/OutputStream, FileWriter, FileReader)
경로 정보를 제공하는 목적으로도 사용 가능하다.
그.. 스트림 생성자에 문자열 경로 썼었는데 그거 대신 File객체 대입할 수 있다.
방법1 (전에 한거)
FileInputStream fis = new FileInputStream("C:/Temp/image.gif");
방법2 (File객체 활용)
File file = new File("C:/Temp/image.gif");
FileInputStream fis = new FileInputStream(file);
꺄 ㅠㅡㅠ
'JAVA' 카테고리의 다른 글
혼공자 - 마지막 프로젝트도 끝냈다! (14챕터 확인문제 1번) (0) | 2020.08.20 |
---|---|
14챕터 [입출력스트림] 요약정리 (복습) (0) | 2020.08.16 |
[6주차] 기본미션 + 선택미션 [혼공단] [혼공자] (0) | 2020.08.16 |
[혼자 공부하는 자바] 8/16 14-2 [보조 스트림] [문자변환] [성능향상] [기본타입입출력] [프린터] (0) | 2020.08.16 |
[혼자 공부하는 자바] 8/14 14-1 [입출력 스트림] [문자 기반 스트림] [문자 입출력 스트림] [Writer] [Reader] (0) | 2020.08.14 |