스트림(Stream)이란?
스트림이란 일차원적인 데이터의 흐름이다.
흐름의 방향에 따른 분류로 입력 스트림(input stream)과 출력 스트림(output stream)으로 나뉘고 데이터 형태에 따른 분류로 문자 스트림(character stream)과 바이트 스트림(byte stream)으로 나뉜다.
문자 스트림 : Reader, Writer
바이트 스트림 : InputStream, OutputStream
입출력 클래스들은 Exception이 발생하기 때문에 try-catch문을 사용하고 finally문을 통해 close() 처리를 반드시 해준다.
FileReader (FileInputStream) 클래스
텍스트 파일을 읽고 텍스트를 파일에 쓰는 클래스 (FileInputStream은 바이트 단위로 데이터를 읽음)
1. 파일을 연다.
FileReader reader = new FileReader("poem.txt");
2. 파일을 읽는다.
int data = reader.read();
3.파일을 닫는다.
reader.close();
- 예제 코드
import java.io.FileReader;
public class FileReaderExam {
public static void main(String[] args) {
FileReader reader = null;
char arr[] = new char[50];
try {
reader = new FileReader("poem.txt");
reader.read(arr);
System.out.print(arr);
// while(true) {
// int data = reader.read();
// if(data == -1) break;
// char c = (char)data;
// System.out.print(c);
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (Exception e2) {}
}
}
}
실행결과 poem.txt 파일에 작성되어 있는 문자들을 읽어온다.
FileWriter (FileOutputStream) 클래스
작성한 텍스트를 파일에 쓰는 클래스 (FileOutputStream은 바이트 단위로 데이터를 쓴다.)
1. 파일을 연다.
FileWriter writer = new FileWriter("poem2.txt");
2. 파일에 문자를 쓴다.
writer.write(poem);
3.파일을 닫는다.
writer.close();
- 예제 코드
import java.io.FileWriter;
import java.util.Scanner;
public class FileWriterExam {
public static void main(String[] args) {
FileWriter writer = null;
Scanner sc = new Scanner(System.in);
System.out.println("입력 :");
String str = "";
String poem = "";
while(!(str = sc.nextLine()).equals("q")) {
poem += str;
poem += "\n";
}
try {
writer = new FileWriter("poem2.txt");
writer.write(poem);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (Exception e2) {}
}
}
}
실행결과 Sanner를 통해 입력한 문자가 poem2 파일에 쓰여짐.
- 예제 코드
import java.io.FileReader;
import java.io.FileWriter;
public class CopyExam {
public static void main(String[] args) {
//poem.txt => poem3.txt copy
FileReader reader = null;
FileWriter writer = null;
char arr[] = new char[100];
try {
reader = new FileReader("poem.txt");
reader.read(arr);
writer = new FileWriter("poem3.txt");
writer.write(arr);
System.out.println("복사완료");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
writer.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
실행결과 poem.txt에서 읽어온 문자를 poem3.txt에 쓰여짐.
보조 스트림 (FilterStream)
보조스트림은 단독으로 사용할 수 없고 입출력 스트림에 연결하여 사용한다. 보조 스트림은 입출력 스트림의 기능을 확장시키고 성능을 향상시키기 위해 사용한다.
DataInputStream, DataOutputStream : 기본형 타입의 데이터를 입출력하는 클래스
ObjectInputStream, ObjectOutputStream : 기본형 타입과 레퍼런스 타입의 데이터를 입출력하는 클래스
LineNumberReader : 텍스트 파일의 각 행에 번호를 붙여가면서 읽는 클래스
BufferedReader(BufferedInputStream) / BufferedWriter(BufferedOutputStream)
입출력 스트림을 통해 문자를 읽어 들이거나 출력할 때 버퍼링을 거치면서 입출력 스트림의 성능을 향상시키는 클래스
- 예제 코드
```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
public class BufferExam {
public static void main(String[] args) {
//System.in => InputStream => InputStreamReader => BufferedReader
BufferedReader br = null;
BufferedWriter bw = null;
String str = "";
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new FileWriter("output.txt", true));
System.out.println("입력 : ");
while((str = br.readLine())!= null){
str += "\n";
bw.write(str);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
```
'Java' 카테고리의 다른 글
[Java] 정렬(Sort) Comparator, Comparable (0) | 2020.07.24 |
---|---|
[Java] 자료구조 List, Set, Map (0) | 2020.07.24 |
[Java] 정규표현식(Regular Expression) (0) | 2020.07.20 |
[Java] java.lang패키지(2) String클래스, StringBuffer클래스 (0) | 2020.07.17 |
[Java] java.lang패키지(1) Object 클래스, wrapper클래스 (0) | 2020.07.17 |