System.in은 InputStream 타입이고 System.out은 PrintStream 타입입니다.
콘솔은 시스템을 사용하기 위해 키보드로 입력을 받고 모니터로 출력하는 소프트웨어를 말합니다.
1. System.in 필드
자바는 콘솔에서 키보드의 데이터를 입력받을 수 있도록 System 클래스의 in 정적 필드를 제공합니다. System.in은 InputStream 타입의 필드이므로 다음과 같이 InputStream 변수로 참조가 가능합니다.
InputStream is - System.in;
키보드로부터 어떤 키가 입력되었는지 확인하려면 InputStream의 read() 메소드로 1byte를 읽으면 됩니다. 리턴된 int 값에는 해당 키의 코드가 저장되어 있습니다.
int keyCode = is.read();
키보드로부터 라인 단위 문자열 얻기
결과:
입력하세요: System.in에
입력된 내용:System.in에
입력하세요: 보조 스트림을 연결해서
입력된 내용:보조 스트림을 연결해서
입력하세요: 편리하게 라인 단위로 입력 받을 수 있습니다.
입력된 내용:편리하게 라인 단위로 입력 받을 수 있습니다.
입력하세요: q
2. Scanner 클래스
Scanner 클래스는 입출력 스트림도 아니고, 보조 스트림도 아닙니다. Scanner는 문자 파일이나 바이트 기반 입력 스트림에서 라인 단위 문자열을 쉽게 읽도록 하기 위해 java.util 패키지에서 제공하는 클래스입니다. System.in에서 살펴보았듯이 라인 단위로 읽기 위해 여러 가지 보조 스트림을 연결하는 작업이 필요했습니다. 하지만 Scanner는 이러한 보조 스트림 없이 매우 쉽게 라인 단위 문자열을 읽기 위해 nextLine() 메소드를 제공합니다.
Scanner scanner = new Scanner(System.in); // 바이트 기반 입력 스트림으로부터 Scanner 생성
String inputData = scanner.nextLine(); // enter 이전까지 입력된 행단위 문자열을 읽음
예제
결과:
1. 등록 | 2. 목록 | 3. 종료
--------------------------
선택: 1
상품명: 마우스
가격: 10000
재고: 5
--------------------------
1. 등록 | 2. 목록 | 3. 종료
--------------------------
선택: 1
상품명: 키보드
가격: 130000
재고: 8
--------------------------
1. 등록 | 2. 목록 | 3. 종료
--------------------------
선택: 2
1 상품명: 마우스 가격: 10000 재고: 5
2 상품명: 키보드 가격: 130000 재고: 8
--------------------------
1. 등록 | 2. 목록 | 3. 종료
--------------------------
선택: 3
3. File 클래스
java.io 패키지에서 제공하는 File 클래스는 파일 및 폴더 정보를 제공해주는 역할을 합니다.
File file = new File("파일 경로");
경로 구분자는 유닉스, 리눅스에서는 \를 사용하고 윈도우에서는 \, / 모두 사용합니다.
파일 객체를 생성했다고 해서 파일이나 폴더가 생성되는 것은 아닙니다. 그리고 제공되는 문자열 경로에 실제 파일이나 폴더가 없더라도 예외가 발생하지 않습니다. 해당 경로에 실제로 파일이나 폴더가 있는지 알고 싶다면 File 객체를 생성한 후 exists() 메소드를 호출하면 됩니다.
boolean isExist = file.exists();
리턴 값이 false라면 다음 메소드로 파일 또는 폴더를 생성할 수 있습니다.
리턴 타입 | 메소드 | 설명 |
bool | createNewFile() | 새로운 파일을 생성 |
bool | mkdir() - makedirectory | 새로운 폴더를 생성 |
bool | mkdirs() | 경로상에 없는 모든 폴더를 생성 |
exists() 메소드의 리턴값이 true라면 다음 메소드를 사용할 수 있습니다.
리턴 타입 | 메소드 | 설명 |
bool | delete() | 파일 또는 폴더 삭제 |
bool | canExecute() | 실행할 수 있는 파일인지 여부 확인 |
bool | canRead() | 읽을 수 있는 파일인지 여부 확인 |
bool | canWrite() | 수정 및 저장할 수 있는 파일이지 여부 확인 |
String | getName() | 파일의 이름을 리턴 |
String | getParent() | 부모 폴더 리턴 |
File | getParentFile() | 부모폴더를 File 객체로 생성 후 리턴 |
String | getPath() | 전체 경로를 리턴 |
bool | isDirectory() | 폴더인지 여부 확인 |
bool | isFile() | 파일인지 여부 확인 |
bool | isHidden() | 숨김 파일인지 여부 확인 |
long | lastModified() | 마지막 수정 날짜 및 시간 리턴 |
long | length() | 파일의 크기 리턴 |
String[] | list() | 폴더에 포함된 파일 및 서브 폴더 목록 전부를 String 배열로 리턴 |
String[] | list(FilenameFilter filter) | 폴더에 포함된 파일 및 서브 폴더 목록 중에 FilenameFilter에 맞는 것만 String 배열로 리턴 |
File[] | listFiles() | 폴더에 포함된 파일 및 서브 폴더 목록 전부를 File 배열로 리턴 |
File[] | listFiles(FilenameFilter filter) | 폴더에 포함된 파일 및 서브 폴더 목록 중에 FilenameFilter에 맞는 것만 File 배열로 리턴 |
다음은 temp 폴더에 images 폴더와 파일 1,2,3을 생성하고 temp 폴더에 있는 파일 목록을 출력하는 예제입니다.
결과:
최종 수정 시간 형태 크기 이름
-----------------------------------------------------------
2021-02-01 오후 15:17 0 file2.txt
2021-02-01 오후 15:17 0 file3.txt
2021-02-01 오후 15:20 31 file1.txt
2021-02-01 오후 15:17 <DIR> images
* 파일 또는 폴더의 정보를 얻기 위해 File 객체를 단독으로 사용할 수 있지만, 파일 입출력 스트림 객체를 생성할 때 경로 정보를 제공할 목적으로도 사용합니다.
//첫번째 방법
File file = new File("temp/images/file1");
FileInputStream fis = new FileInputStream(file);
'java' 카테고리의 다른 글
보조 스트림 (0) | 2021.02.01 |
---|---|
java 입출력 스트림 (0) | 2021.01.30 |
java 스택, 큐 (0) | 2021.01.30 |
java 컬렉션 프레임워크 (0) | 2021.01.29 |
스레드 제어 (0) | 2021.01.29 |