감싸고 싶은 부분 드래그한 다음 Alt+ctrl+t하면 자동생성(if-else문, try-catch문 등)
Input과 Output의 약자로 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 연동을 위한 자바 라이브러리이다.
단방향 데이터 송수신을 위해 스트림을 활용하여 데이터를 서로 주고 받게 된다.

입출력 장치에서 데이터를 읽고 쓰기 위한 단방향 통로
각각의 장치마다 연결할 수 있는 스트림이 존재
InputStream과 Reader는 데이터를 읽어오는 입력스트림이고
OutputStream과 Writer는 데이터를 내보내는 출력스트림이다.
바이트 단위 처리와 문자 단위 처리를 위한 스트림 등이 존재
스트림은 기본적으로 1바이트 단위의 데이터만 지나가게 되고
주고 받는 데이터의 기본 단위가 1바이트 이므로 한 방향만 처리가 가능하여 입력 스트림과 출력 스트림을 따로 구성해야 한다.

(+) 한글의 경우 2~3바이트로 표현됨 -> 문자단위를 처리할 수 있는 스트림 활용(인코딩 방식에 맞춰 2~3바이트 단위를 구분하여 입출력함)
FileReader
: (FileInputStream과 달리) byte 단위가 아닌 character 단위로 읽어들임. 따라서 2바이트이던 3바이트이던 글자 단위로 읽어오기 때문에 한글을 정상적으로 읽어올 수 있다.
OutputStream
: 대상 파일이 존재하지 않으면 파일을 자동으로 생성해준다. 두번째 인자로 true를 전달하면 이어쓰기가 된다. false는 이어쓰기가 아닌 덮어쓰기이며 기본값은 false이다
File file = new File("file path");
boolean createNewFile() 새로운 파일 생성
boolean mkdir() 새로운 디렉토리 생성
boolean mkdirs() 경로 상에 없는 모든 디렉토리 생성
boolean delete() 파일 또는 디렉토리 삭제
boolean canExecute() 실행할 수 있는 파일인지 여부
boolean canRead() 읽을 수 있는 파일인지 여부
boolean canWrite() 수정 및 저장할 수 있는 파일인지 여부
String getName() 파일 이름 리턴
String getParent() 부모 디렉토리 리턴
File getParentFile() 부모 디렉토리를 File객체로 생성 후 리턴
String getPath() 전체 경로 리턴
boolean isDirectory() 디렉토리인지 여부
boolean isFile() 파일인지 여부
boolean isHidden() 숨김 파일인지 여부
long lastModified() 마지막 수정 날짜 및 시간 리턴
long length() 파일 크기 리턴



형변환 보조스트림
기본 스트림이 byte기반스트림이고, 보조스트림이 char기반 스트림인 경우에 사용한다.
표준 스트림
자바에서는 콘솔이나 키보드 같은 표준 입출력 장치로부터 데이터를 입출력하기 위한 스트림을
표준 스트림 형태로 제공하고 있다. System클래스의 필드 in, out, err가 대상 데이터에 스트림을 의미한다.
System.in(InputStream) : 콘솔로부터 데이터를 입력받는다.
System.out(PrintStream) : 콘솔로 데이터를 출력한다.
System.err(PrintStream) : 콘솔로 데이터를 출력한다.
즉 자주 사용되는 자원에 대해 미리 스트림을 생성해 두었기 때문에 개발자가 별도로 스트림을 생성하지 않아도 된다.