์ ์ถ๋ ฅ ์คํธ๋ฆผ
1. ์ ์ถ๋ ฅ ์คํธ๋ฆผ
์๋ฐ์์ ๋ฐ์ดํฐ๋ ์คํธ๋ฆผ์ ํตํด ์ ์ถ๋ ฅ๋๋ค. ์คํธ๋ฆผ์ ๋จ์ผ ๋ฐฉํฅ์ผ๋ก ์ฐ์์ ์ผ๋ก ํ๋ฌ๊ฐ๋ ๊ฒ์ ๋งํ๋๋ฐ ๋ฌผ์ด ๋์ ๊ณณ์์ ๋ฎ์ ๊ณณ์ผ๋ก ํ๋ฅด๋ฏ์ด ๋ฐ์ดํฐ๋ ์ถ๋ฐ์ง์์ ๋์ฐฉ์ง๋ก ํ๋ฌ๊ฐ๋ค.
์ด๋, ํ๋ก๊ทธ๋จ์ด ์ถ๋ฐ์ง๋ ๋์ฐฉ์ง๋์ ๋ฐ๋ผ์ ์ฌ์ฉํ๋ ์คํธ๋ฆผ์ ์ข ๋ฅ๊ฐ ๊ฒฐ์ ๋๋ค. ํ๋ก๊ทธ๋จ์ด ๋์ฐฉ์ง์ด๋ฉด ํ๋ฌ์จ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์์ผ ํ๋ฏ๋ก ์ ๋ ฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ๊ณ ๋ฐ๋๋ก ํ๋ก๊ทธ๋จ์ด ์ถ๋ฐ์ง๋ฉด ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ค.
2. ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ข ๋ฅ
java.io ํจํค์ง์๋ ์ฌ๋ฌ ๊ฐ์ง ์ข ๋ฅ์ ์คํธ๋ฆผ ํด๋์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
1) ๋ฐ์ดํธ(Byte) ๊ธฐ๋ฐ ์คํธ๋ฆผ
- ๊ทธ๋ฆผ, ๋ฉํฐ๋ฏธ๋์ด ๋ฑ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ค.
- InputStream: ์ ๋ ฅ ์คํธ๋ฆผ ์ต์์ ํด๋์ค
- OutputStream: ์ถ๋ ฅ ์คํธ๋ฆผ ์ต์์ ํด๋์ค
// ์ถ๋ ฅ ์คํธ๋ฆผ
import java.io.FileOutputStream; // ์ถ๋ ฅ ์คํธ๋ฆผ ํ์ ํด๋์ค
import java.io.OutputStream; // ์ถ๋ ฅ ์คํธ๋ฆผ ์ต์์ ํด๋์ค
public class WriteExample {
public static void main(String[] args) throws Exception {
OutputStream os = new FileOutputStream("C:/Temp/test1.db");
// write(int): ๋์ 1byte๋ง ์ถ๋ ฅํ๋ค.
byte a = 10;
byte b = 20;
byte c = 30;
os.write(a);
os.write(b);
os.write(c);
// write(byte[]): ๋ฐฐ์ด์ ๋ชจ๋ ๋ฐ์ดํธ๋ฅผ ์ถ๋ ฅํ๋ค.
byte[] array1 = { 10, 20, 30 };
os.write(array1);
// write(byte[], int off, int len): b[off]๋ถํฐ len๊ฐ์ ๋ฐ์ดํธ๋ฅผ ์ถ๋ ฅํ๋ค.
byte[] array2 = { 10, 20, 30, 40, 50 };
os.write(array2, 1, 3);
os.flush(); // ์ถ๋ ฅ ๋ฒํผ์ ์๋ฅํ๋ ๋ชจ๋ ๋ฐ์ดํธ๋ฅผ ์ถ๋ ฅํ๋ค.
os.close(); // ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ซ๋๋ค.
}
}
// ์
๋ ฅ ์คํธ๋ฆผ
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExample {
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("C:/Temp/test.db");
// read(): 1byte๋ง ์ฝ๋๋ค.
while (true) {
int data = is.read();
if (data == -1) break; // ํ์ผ์ ๋์ ๋๋ฌํ์ ๊ฒฝ์ฐ ๋ฉ์ถ๋ค.
System.out.println(data);
}
// read(byte[]): ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๋ฐ์ดํธ๋ฅผ ์ฝ๊ณ ํด๋น ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
byte[] buffer = new byte[100];
while (true) {
int readByteNum = is.read(buffer);
if (readByteNum == -1) break;
for (int i = 0; i < readByteNum; i++) {
System.out.println(buffer[i]);
}
}
// read(byte[], int off, int len): len๊ฐ์ ๋ฐ์ดํธ๋ฅผ ์ฝ๊ณ b[off]๋ถํฐ len๊ฐ๊น์ง ์ ์ฅํ๋ค.
byte[] buffer = new byte[5];
int readByteNum = is.read(buffer, 2, 3);
if (readByteNum != -1) {
for (int i = 0; i < buffer.length; i++) {
System.out.println(buffer[i]);
}
}
is.close(); // ์
๋ ฅ ์คํธ๋ฆผ์ ๋ซ๋๋ค.
}
}
2) ๋ฌธ์(Character) ๊ธฐ๋ฐ ์คํธ๋ฆผ
- ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ค.
- Reader: ์ ๋ ฅ ์คํธ๋ฆผ ์ต์์ ํด๋์ค
- Writer: ์ถ๋ ฅ ์คํธ๋ฆผ ์ต์์ ํด๋์ค
- ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ๊ณผ ๋ฉ์๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋น์ทํ๋ค.
3. ๋ณด์กฐ ์คํธ๋ฆผ
- ๋ฐ์ดํฐ๋ฅผ ๋ณํํด์ ์ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ์ ์ถ๋ ฅ ํ์์ ์ง์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ์ ์ถ๋ ฅ ์ฑ๋ฅ์ ํฅ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์ด๋ด ๋ ๊ธฐ๋ณธ ์คํธ๋ฆผ์ ๋ณด์กฐ ์คํธ๋ฆผ์ ์ฐ๊ฒฐํ์ฌ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ํํ ์ ์๋ค.
๋ณด์กฐ ์คํธ๋ฆผ์ด๋ ๋ค๋ฅธ ์คํธ๋ฆผ๊ณผ ์ฐ๊ฒฐ์ด ๋์ด ์ฌ๋ฌ ๊ฐ์ง ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ ์คํธ๋ฆผ์ ๋งํ๋ค. ์์ฒด์ ์ผ๋ก ์ ์ถ๋ ฅ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ถ๋ ฅ ์์ค์ ๋ฐ๋ก ์ฐ๊ฒฐ๋๋ ๊ธฐ๋ณธ ์คํธ๋ฆผ๊ณผ ์ฐ๊ฒฐํด์ ์ ์ถ๋ ฅ์ ์ํํ๋ค.
๋ณด์กฐ ์คํธ๋ฆผ์ ์์ฑํ ๋๋ ์ฐ๊ฒฐ๋ ์คํธ๋ฆผ์ ์์ฑ์์ ๋งค๊ฐ ๊ฐ์ผ๋ก ์ ๊ณตํ์ฌ ์ฐ๊ฒฐํ๋ค. ๊ธฐ๋ณธ ์คํธ๋ฆผ ์ธ์๋ ๋ค๋ฅธ ๋ณด์กฐ ์คํธ๋ฆผ๋ค์ ์ฐ์์ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
InputStream is = ...;
InputStreamReader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);
1) ๋ฌธ์ ๋ณํ ๋ณด์กฐ ์คํธ๋ฆผ
// OutputStreamWriter: ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ๋ฌธ์ ์ถ๋ ฅ ์คํธ๋ฆผ(Writer)๋ก ๋ณํํ๋ค.
FileOutputStream fos = new FileOutputStream("C:/Temp/test1.txt");
Writer writer = new OutputStreamWriter(fos);
// InputStreamReader: ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ๋ฌธ์ ์
๋ ฅ ์คํธ๋ฆผ(Reader)๋ก ๋ณํํ๋ค.
FileInputStream fis = new FileInputStream("C:/Temp/test1.txt");
Reader reader = new InputStreamReader(fis);
2) ์ฑ๋ฅ ํฅ์ ๋ณด์กฐ ์คํธ๋ฆผ
ํ๋ก๊ทธ๋จ์ด ์ ์ถ๋ ฅ ์์ค์ ์ง์ ์์ ํ์ง ์๊ณ ์ค๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์์ ํจ์ผ๋ก์จ ์คํ ์ฑ๋ฅ์ ํฅ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋์ผ๋ก์จ ์ฐ๊ธฐ ์๋๋ฅผ ํฅ์ํ ์ ์๋ค. ๋ฒํผ๋ ๋ฐ์ดํฐ๊ฐ ์์ด๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์ฐจ๊ฒ ๋๋ฉด ํ๊บผ๋ฒ์ ํ๋ ๋์คํฌ๋ก ๋ณด๋์ผ๋ก์จ ์ถ๋ ฅ ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
// BufferedInputStream: ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ์ฐ๊ฒฐ๋์ด ๋ฒํผ๋ฅผ ์ ๊ณตํ๋ค. (๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ๋ ๋์ผ)
FileInputStream fis = new FileInputStream(originalFilePath);
BufferedInputStream bis = new BufferedInputStream(fis);
// BufferedOutputStream: ๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ ์ฐ๊ฒฐ๋์ด ๋ฒํผ๋ฅผ ์ ๊ณตํ๋ค. (๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ๋ ๋์ผ)
FileOutputStream fos = new FileOutputStream(targetFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
3) ๊ธฐ๋ณธ ํ์ ์ ์ถ๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
๊ธฐ๋ณธ ํ์ ์ธ char, short ๋ฑ์ ์ ์ถ๋ ฅํ ์ ์๋ค.
public class DataInputOutputStreamExample {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C:/Temp/primitive.db");
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("ํ๊ธธ๋");
dos.writeDouble(95.5);
dos.writeInt(1);
dos.writeUTF("๊ฐ์๋ฐ");
dos.writeDouble(90.3);
dos.writeInt(2);
dos.flush(); dos.close(); fos.close();
FileInputStream fis = new FileInputStream("C:/Temp/primitive.db");
DataInputStream dis = new DataInputStream(fis);
for(int i=0; i<2; i++) {
String name = dis.readUTF();
double score = dis.readDouble();
int order = dis.readInt();
System.out.println(name + " : " + score + " : " + order);
}
dis.close(); fis.close();
}
}
4) ํ๋ฆฐํฐ ๋ณด์กฐ ์คํธ๋ฆผ
public class PrintStreamExample {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("C:/Temp/printstream.txt");
PrintStream ps = new PrintStream(fos);
ps.println("[ํ๋ฆฐํฐ ๋ณด์กฐ ์คํธ๋ฆผ]");
ps.print("๋ง์น ");
ps.println("ํ๋ฆฐํฐ๊ฐ ์ถ๋ ฅํ๋ ๊ฒ์ฒ๋ผ ");
ps.println("๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.");
ps.flush();
ps.close();
}
}
5) ๊ฐ์ฒด ์ ์ถ๋ ฅ ๋ณด์กฐ ์คํธ๋ฆผ
๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ํ์ผ ๋๋ ๋คํธ์ํฌ๋ก ์ถ๋ ฅํ ์ ์๋ค.
public static void writeList() throws Exception {
List<Board> list = new ArrayList<>();
list.add(new Board(1, "์ ๋ชฉ1", "๋ด์ฉ1", "๊ธ์ด์ด1", new Date()));
list.add(new Board(2, "์ ๋ชฉ2", "๋ด์ฉ2", "๊ธ์ด์ด2", new Date()));
list.add(new Board(3, "์ ๋ชฉ3", "๋ด์ฉ3", "๊ธ์ด์ด3", new Date()));
FileOutputStream fos = new FileOutputStream("C:/Temp/board.db");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
oos.flush();
oos.close();
}
public static List<Board> readList() throws Exception {
FileInputStream fis = new FileInputStream("C:/Temp/board.db");
ObjectInputStream ois = new ObjectInputStream(fis);
List<Board> list = (List<Board>) ois.readObject();
return list;
}