- InputStream
- 시스템 입력 기능
- InputStreamReader
- InputStream의 기능을 추가 보완하여 2바이트 이진수로써 나타낼 수 있는 범위를 확장한 클래스 (한글 매핑이 가능해짐)
- BufferedReader
- InputStreamReader 기능을 추가 보완한 클래스 (문자열 입력이 가능해짐)
- 사용 메소드
- read() : 입력받은 숫자값 1문자를 유니코드로 변환하여 반환한다. (try catch문 사용)
- readLine() : BufferedReader의 메소드이며 문자열을 입력받을 수 있다. (try catch문 사용)
- 형식
InputStream ips = System.in;
InputStreamReader ipr = new InputStreamReader(ips);
BufferedReader bf = new BufferedReader(ipr);
System.out.println("입력 : ");
try {
int num = ipr.read();
System.out.println(num);
char ch = (char) num;
System.out.println(ch);
String text = bf.readLine();
System.out.println(text);
} catch (IOException e) {
e.printStackTrace();
}
📌 PrintStream
- PrintStream
- 시스템 출력 기능
- OutputStream
- PrintStream 클래스의 부모 클래스이다.
- 1바이트 출력 스트림이다. (한글 출력 안됨)
- OutputStreamWriter
- OutputStream의 기능을 추가 보완한 클래스이다.
- 2바이트 출력 스트림이다. (한글 출력 가능)
- 문자열을 입력 받아 출력할 수도 있다.
- 사용 메소드
- write() : 파라미터로 전달된 숫자나 문자열, Array들을 문자로 출력하는 메소드 (try catch문 사용)
- 형식
PrintStream ps = System.out;
OutputStream os = ps;
OutputStreamWriter osw = new OutputStreamWriter(os);
try {
osw.write(97);
osw.write(44032);
osw.write("aa");
osw.flush();
} catch (IOException e) {
e.printStackTrace();
}
📌 File 클래스
- File
- 파일 입출력을 지원하는 클래스
- 사용 메소드
- 객체.list() : File 객체가 지정한 경로의 파일 이름 리스트를 반환
- 객체.listFiles() : 파일 하나하나에 객체를 부여하여 리스트 형태로 반환
- 단일객체.getName() : 객체 하나(파일)의 이름을 반환
- 단일객체.exists() : 객체 하나(파일)의 존재 유무를 반환
- 단일객체.delete() : 객체 하나(파일)을 삭제
- 단일객체.createNewFile() : 객체 하나(파일)을 생성 (try catch문 사용)
- 형식
File f = new File("C:/");
File[] files = f.listFiles();
for(File file:files) {
if(file.isDirectory()) {
System.out.println("["+file.getName()+"]");
} else {
System.out.println(file.getName());
}
}
📌 FileWriter
- FileWriter
- 파일에 쓰기 기능을 지원하는 클래스
- 생성자
- new FileWriter(File 객체, 쓰기 방식) : File 객체(파일)을 받아서 해당 파일에 쓰기 기능을 준비
쓰기 방식 = true : 기존에 있는 내용을 유지하며 쓰는 방식
쓰기 방식 = false : 기존에 있는 내용에 덮어쓰기하는 방식
- 사용 메소드
- write(String) : String 문자열을 지정한 파일에 입력함
- flush() : 입력한 문자열들을 실제 적용을 위해 사용하는 메소드
- close() : 쓰기 기능을 모두 사용하면 반드시 종료해야 한다.
File f = new File("C:/acorn202206/testFolder/test.txt");
try {
if(!f.exists()) {
f.createNewFile();
}
FileWriter writer = new FileWriter(f, true);
writer.write("a1");
writer.write("a2");
writer.flush();
writer.close();
} catch(IOException e) {
e.printStackTrace();
}
📌 FileReader
- FileReader
- 파일에 읽기 기능을 지원하는 클래스
- 한 문자씩 읽기 때문에 while문을 사용한다.
- BufferedReader 객체를 사용하여 한 줄씩 읽을 수 있다.
- 생성자
- new FileReader(File 객체) : File 객체(파일)을 받아서 해당 파일을 읽기
- 사용 메소드
- read() : 커서 다음 위치의 문자을 읽음
- close() : 읽기 기능을 모두 사용하면 반드시 종료해야 한다.
File f = new File("C:/acorn202206/testFolder/test.txt");
try {
if(!f.exists()) {
f.createNewFile();
}
FileReader reader = new FileReader(f);
while(true) {
int num = reader.read();
char ch = (char)num;
System.out.print(ch);
if(!reader.ready()) {
break;
}
}
reader.close();
} catch(IOException e) {
e.printStackTrace();
}
try {
if(!f.exists()) {
f.createNewFile();
}
FileReader reader = new FileReader(f);
BufferedReader br = new BufferedReader(reader);
while(br.ready()) {
System.out.println(br.readLine());
}
br.close();
reader.close();
} catch(IOException e) {
e.printStackTrace();
}
- FileInputStream
- 파일 입력 스트림(읽기)을 지원하는 클래스
- FileOutputStream
- 파일 출력 스트림(쓰기)을 지원하는 클래스
- 사용 메소드
- read() : 한 바이트씩 읽는 메소드
- read(byte[]) : 지정한 Array만큼의 바이트를 읽어내는 메소드
- write() :
- write(byte[], 시작 index, read한 데이터) : byte[] 객체에서 시작 index부터 read한 데이터까지 데이터를 파일에 쓴다.
- flush() : 파일에 실제 쓰기를 적용하기 위해 사용하는 메소드
- 형식
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("C:/acorn202206/testFolder/7.jpg");
fos = new FileOutputStream("C:/acorn202206/testFolder/test.jpg");
byte[] buffer = new byte[1024];
while(true) {
int readedByte = fis.read(buffer);
System.out.println(readedByte);
if(readedByte==-1) {
break;
}
fos.write(buffer, 0, readedByte);
fos.flush();
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(fos!=null) fos.close();
if(fis!=null) fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}