[JAVA] ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ

2021. 4. 29. 18:40ยท๐Ÿ“ Language/โœ JAVA

์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ

 

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;
}
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • JSP์™€ Servlet
  • Spring๊ณผ SpringBoot
  • [JAVA] ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • [JAVA] ์Šค๋ ˆ๋“œ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[JAVA] ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”