본 게시글은 대학 전공수업을 들으며 노션에 정리한 내용을 블로그로 옮긴 것으로, 노션 웹을 통해 최적화된 형태로 읽으시길 권장드립니다.(➡️ 노션 링크)
9강 - Java.io:입출력스트림
입출력 스트림
Java 프로그램에서, 스트림을 통해 입출력을 수행. (Java.io패키지에서 제공)
- 입력 : 데이터 생산자(소스)와 프로그램을 연결
- 출력 : 프로그램과 소비자(목적지)를 연결
입출력 종류와 상관없이 동일한 방법으로 프로그램 작성
What is stream?
- 생산자 또는 소비자와 프로그램 사이의 데이터 ‘흐름’
- 순서가 있는 흐름으로 정해진 방향. 순차적 접근!
스트림의 분류
입력스트림 vs 출력 스트림 :
바이트 스트림 vs 캐릭터 스트림
- : 바이트 단위(_InputStream/OutputStream)
- vs 문자단위(_Reader /Writer)
기본 스트림 vs 보조 스트림
주기능(입출력) 제공 vs 보조기능 제공
기본 스트림 객체 먼저 생성 → 기본 스트림을 감싸 보조스트림 객체를 생성
FileInputStream fis = new FileInputStream("text.txt"); //생성 BufferedInputStream bis = new BufferedInputStream(fis); //보조스트림 생성
바이트스트림과 캐릭터 스트림
InputStream 클래스
- 바이트단위 입력 스트림 클래스 중, 최상위 추상 클래스.
- 하위 클래스들은 ___InputStream
메소드
abstract int rea()
- 입력 스트림으로부터 1바이트를 읽어 정수로 리턴
int read(byte[] b)
- 입력 스트림으로부터 읽어서 byte 배열에 저장, 읽어들인 바이트 개수를 리턴
int read(byte[] b, int off, int len)
- len 바이트를 읽어 바이트 배열의 off위치부터 저장
int available()
- 다음 read()할 때, 블로킹 없이 입력 스트림에서 읽을 수 있는 바이트 단위의 데이터 길이
long skip(long n)
- 입력 스트림에서 n바이트를 건너 뜀
void mark(int readlimit)
- 입력 스트림에서 현재 위치를 표시함
void reset()
- mark()에서 표시된 위치로 스트림의 현재 위치를 이동
OutputStream 클래스
바이트 단위 출력 스트림 클래스 중, 최상위 추상 클래스
- 하위클래스들은 ___OutputStream
메소드
abstract void write(int b)
- 1바이트 데이터를 출력 스트림에 씀
void write(byte[] b)
- byte형 배열b의 모든 바이트를 출력 스트림에 씀
void write(byte[] b, int off, int len)
- byte형 배열 b의 off위치부터 len 바이트를 출력 스트림에 씀
void close()
- 출력 스트림을 닫고 자원을 돌려줌
void flush()
- 출력 스트림에 남아있는 모든 데이터를 최종 목적지로 보냄
Reader클래스
입력용 캐릭터 단위 스트림 클래스 중 최상위 추상 클래스
하위클래스 : ___Reader
(후략)
Writer클래스
출력용 캐릭터 단위 스트림 클래스 중 최상위 추상 클래스
하위 : ___Writer
(후략)
파일 입출력
File클래스
- 상대/절대 path를 가지는 파일 또는 디렉터리를 표현
- 이름/경로의 조회 / 생성 / 삭제
- 입출력 메소드 제공❌
File myFile1 = new File(”D:₩₩Intelij₩₩JavaStudy₩₩src”);
File myFile2 = new FIle(”notepad.exe”);
메소드
boolean exists()
- file객체가, 파일 또는 디렉터리로 존재하는가?
boolean isDirectory()
- 경로가 디렉터리인가?
boolean isFile()
- 경로가 파일인가?
String getName() : 이름 리턴
String get Path() : 경로 전체 리턴
long length() : 크기를 바이트 단위로 리턴
boolean createNewFile()
- 파일 객체에 지정된 파일을 생성
boolean deletE()
- File객체에 지정된 파일 또는 디렉터리를 삭제
boolean mkdir()
- file객체에 지정된 것을 디렉터리로 만듦(맨 마지막 디렉터리만 생성)
boolean mkdirs()
- mkdir과 같으나, 지정된 경로상의 모든 필요한 디렉터리 생성
String[] list()
- 파일과 디렉터리를 문자열 배열로 리턴
File[] listFiles()
- 위와 같으나, File객체의 배열로 리턴
String getParent()
- 상위 디렉터리 이름을 문자열로 리턴
File getParentFIle()
- 상위 디렉터리를 File객체로 리턴
static File[] listRoots()
- 루트 디렉터리를 File객체의 배열로 리턴
RandomAccessFile클래스
- 파일의 임의 위치에서 읽기 또는 쓰기 연산을 지원
- 파일 오픈 / 위치 지정 / 읽기 또는 쓰기
- 읽고 쓰는 위치는 파일 포인터가 가리킴
- byte단위로 읽고 씀, 읽거나 쓸 때 파일 포인터가 이동됨.
- 따라서 커다란 byte배열로 볼 수 있음.
FileInput/OutputStream
파일로부터 데이터를 읽기/쓰기 위한 입력/출력용 기본 스트림
- 바이트단위의 입/출력 : 이미지/오디오파일시 유용
생성자 : FileInputStream(File file 또는 String name)
……
FileReader/ FileWriter
Console클래스
: 콘솔 입출력을 제공하는 클래스.
- 키보드 입력과 화면 출력을 편리하게 지원
- 터미널 창과 같은 콘솔 환경에서 사용자와의 상호작용 지원.
- Console con = System.console();을 사용, 콘솔객체 생성
메소드
String readLine()
- 콘솔에서 한 라인을 읽음
char[] readPassword()
- 콘솔에서 비밀번호를 읽음. (입력하더라도 화면에 보이지 않음)
PrintWriter writer()
- 콘솔과 연결된 PrintWriter객체를 리턴함
Reader reader()
콘솔과 연결된 Reader 객체를 리턴
코드
package lecture09; import java.io.Console; public class ConsoleClass { public static void main(String args[]) { String name; char[] pw; //Eclipse, IntelliJ와 같은 GUI /IDE환경에서는 실행X Console con = System.console(); if (con == null) { System.out.println("Console not found"); System.exit(0); } System.out.print("name : "); name = con.readLine(); System.out.print("password : "); pw = con.readPassword(); con.printf("name : %s\n", name); con.printf("password : %s\n", new String(pw)); } }
'Back-End > Java' 카테고리의 다른 글
(전공 정리) 13강 - 멀티 스레드 프로그래밍 : 프로세스, 스레드, 스레드 제어 (0) | 2024.06.22 |
---|---|
(전공 정리) 12강 - 스트림 : 중간연산(필터링,매핑,정렬,루핑), 종료연산(집계, 매칭) (0) | 2024.06.22 |
(전공 정리) 11강 - 컬렉션 : JCF, Iterator, 자료구조, HashSet, ArrayList, LinkedList, HashMap (0) | 2024.06.22 |
(전공 정리) 8강 - java.lang 패키지: Object, String, StringBuffer (0) | 2024.06.22 |
(전공 정리) 7강 - 패키지와 예외처리 (0) | 2024.06.22 |
(전공 정리) 6강 - 제네릭, 람다식 (0) | 2024.06.22 |