๊ด€๋ฆฌ ๋ฉ”๋‰ด

<Hello Hosung๐Ÿ˜Ž/>

[Java] ํŒŒ์ผ ์ž…์ถœ๋ ฅ (IO) ์ดํ•ดํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ’ป Java/ใ…คJava(Basic)

[Java] ํŒŒ์ผ ์ž…์ถœ๋ ฅ (IO) ์ดํ•ดํ•˜๊ธฐ

์ขŒ์ถฉ์šฐ๋Œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ผ๊ธฐ๐Ÿง 2024. 11. 9. 16:27

 
 
Java์—์„œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์ž์ฃผ ์“ฐ์ด๋Š” ํด๋ž˜์Šค๋“ค, ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 


 

1. ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๊ธฐ๋ณธ ๊ฐœ๋…

Java์˜ ์ž…์ถœ๋ ฅ์€ ์ŠคํŠธ๋ฆผ(Stream) ๊ฐœ๋…์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ „์†กํ•˜๋Š” ํ๋ฆ„์œผ๋กœ, Java๋Š” ์ด๋ฅผ ํ†ตํ•ด ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ์—๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค

  • ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ: InputStream, OutputStream์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ(byte) ๋‹จ์œ„๋กœ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋“ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ž ์ŠคํŠธ๋ฆผ: Reader, Writer๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๋ฌธ์ž๋ฅผ ๋ฌธ์ž(char) ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์™€ ์˜ˆ์ œ

(1) File ํด๋ž˜์Šค
File ํด๋ž˜์Šค๋Š” ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ƒ์„ฑ, ์‚ญ์ œ, ์ •๋ณด ์กฐํšŒ๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
 

import java.io.File;

public class FileExample {
    public static void main(String[] args) {
        File file = new File("example.txt");

        // ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
        if (file.exists()) {
            System.out.println("ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.");
        } else {
            try {
                file.createNewFile();
                System.out.println("์ƒˆ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

 
(2) FileWriter์™€ FileReader (๋ฌธ์ž ์ŠคํŠธ๋ฆผ)
FileWriter์™€ FileReader๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž๋ฅผ ์ž…์ถœ๋ ฅํ•˜๋Š” ์ŠคํŠธ๋ฆผ์ด๋ฏ€๋กœ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • FileWriter: ํŒŒ์ผ์— ๋ฌธ์ž์—ด์„ ์“ธ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • FileReader: ํŒŒ์ผ์—์„œ ๋ฌธ์ž์—ด์„ ์ฝ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

public class FileWriterReaderExample {
    public static void main(String[] args) {
        // ํŒŒ์ผ ์“ฐ๊ธฐ
        try (FileWriter writer = new FileWriter("example.txt")) {
            writer.write("์•ˆ๋…•ํ•˜์„ธ์š”, Java ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.");
            System.out.println("ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ํŒŒ์ผ ์ฝ๊ธฐ
        try (FileReader reader = new FileReader("example.txt")) {
            int data;
            while ((data = reader.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 
(3) BufferedWriter์™€ BufferedReader (๋ฌธ์ž ๋ฒ„ํผ ์ŠคํŠธ๋ฆผ)
๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ BufferedWriter์™€ BufferedReader๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํฐ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

public class BufferedWriterReaderExample {
    public static void main(String[] args) {
        // BufferedWriter๋ฅผ ์‚ฌ์šฉํ•œ ํŒŒ์ผ ์“ฐ๊ธฐ
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
            writer.write("๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์“ฐ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.");
            writer.newLine(); // ์ค„ ๋ฐ”๊ฟˆ
            writer.write("์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.");
            System.out.println("๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ ํŒŒ์ผ ์“ฐ๊ธฐ ์™„๋ฃŒ.");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // BufferedReader๋ฅผ ์‚ฌ์šฉํ•œ ํŒŒ์ผ ์ฝ๊ธฐ
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 
(4) FileOutputStream๊ณผ FileInputStream (๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ)
๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์€ ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค ๋“ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. FileOutputStream๊ณผ FileInputStream์„ ํ†ตํ•ด ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class FileOutputStreamInputStreamExample {
    public static void main(String[] args) {
        // ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์“ฐ๊ธฐ
        try (FileOutputStream out = new FileOutputStream("example.dat")) {
            out.write(65); // 'A'์˜ ASCII ์ฝ”๋“œ
            out.write(66); // 'B'์˜ ASCII ์ฝ”๋“œ
            System.out.println("๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ฝ๊ธฐ
        try (FileInputStream in = new FileInputStream("example.dat")) {
            int data;
            while ((data = in.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์ •๋ฆฌ

Java์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FileWriter์™€ FileReader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๊ฑฐ๋‚˜, FileOutputStream๊ณผ FileInputStream์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, BufferedReader์™€ BufferedWriter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
Java ์ž…์ถœ๋ ฅ์€ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ์œ„ํ•œ ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์˜ˆ์ œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•ด ๋ณด๋ฉด์„œ ์ดํ•ดํ•ด ๋ณด์„ธ์š”