Java: Input/Output Stream

    Java: Input/Output Stream

    2013, Jul 23    

    ๊ด€๋ จ ๋ฌธ์„œ

    ์ด ๊ธ€์€ ๋‚จ๊ถ์„ฑ ์ € โ€˜Java์˜ ์ •์„โ€™์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Œ. http://cafe.naver.com/javachobostudy.cafe

    ์ธ์ฝ”๋”ฉ, encoding์ด๋ž€?

    ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ(Stream)ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜๋‚˜ ๋„คํŠธ์›Œํฌ์ƒ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—….

    ์ŠคํŠธ๋ฆผ, stream์ด๋ž€?

    ์ผ๋ จ์˜ ์—ฐ์†๋œ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์œผ๋กœ ์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ๊ณผ ์™ธ๋ถ€์žฅ์น˜ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋‹ค. ์ถ”์ƒํ™”, ์‹ค์ œ ์žฅ์น˜์™€ ์ƒ๊ด€์—†์ด ๊ณตํ†ต๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค.

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ: InputStream, OutputStream

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ ๋ฐ”์ดํŠธ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ํด๋ž˜์Šค๋กœ InputStream๊ณผ OutputStream์„ ์ƒ์†๋ฐ›๋Š” FileStream, ByteArrayStream, PipedStream, AudioStream, StringBufferStream ๋“ฑ์ด ์žˆ๋‹ค.

    ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ ์ข…๋ฅ˜์— ๋”ฐ๋ผ mark()์™€ reset()์„ ์‚ฌ์šฉํ•ด ํŠน์ • ์ง€์ ์„ ๋งˆํ‚นํ•˜๊ณ  ๊ทธ ์ง€์ ์—์„œ ๋‹ค์‹œ ์ฝ๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. flush()๋Š” ๋ฒ„ํผ๊ฐ€ ์žˆ๋Š” ์ถœ๋ ฅ์šฉ ์ŠคํŠธ๋ฆผ(OutputStream์„ ํ™•์žฅํ•œ ํด๋ž˜์Šค๋“ค)์˜ ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , OutputStream์— ์ •์˜๋œ flush()๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    FileIntputstream/FileOutputStream

    ํŒŒ์ผ ์ž…์ถœ๋ ฅ์— ์‚ฌ์šฉ๋˜๋Š” ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค.

    File file = new File("c:\\iotest", "stream.txt");
    if (! file.exists()) {
        file.createNewFile();
    }
    
    // ์“ฐ๊ธฐ
    FileOutputStream fos = new FileOutputStream("c:\\iotest\\stream.txt", true);
    // true : Append, ์ด์–ด์“ฐ๊ธฐ
    // false : Create, ๊ธฐ์กด ๋‚ด์šฉ์— ๋ฎ์–ด์“ฐ๊ธฐ
    // ๊ธฐ๋ณธ๊ฐ’ : false
    
    fos.write(97); // a๊ฐ€ stream.txt์— ์“ฐ์—ฌ์ง
    fos.write(98); // b๊ฐ€ stream.txt์— ์“ฐ์—ฌ์ง
    fos.write(99); // c๊ฐ€ stream.txt์— ์“ฐ์—ฌ์ง
    fos.close();
    
    // ์ฝ๊ธฐ
    FileInputStream fis = new FileInputStream("c:\\iotest\\stream.txt");
    
    int data = 0;
    while ((data = fis.read()) != -1) { // ๋” ์ด์ƒ ์ฝ์„๊ฒƒ์ด ์—†์„ ๋•Œ -1
        System.out.print((char) data); //์ŠคํŠธ๋ฆผ์ด ์ฝ์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅ
    }
    fis.close();
    

    ์•„๋ž˜๋Š” ํŒŒ์ผ์„ ์ฝ์–ด์™€ ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธํŒŒ์ผ์— ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋‹ค:

    FileInputStream fis = new FileInputStream("c:\\iotest\\origin.txt");
    FileOutputStream fos = new FileOutputStream("c:\\iotest\\clone.txt", false);         
    
    int data = 0;
    while ((data = fis.read()) != -1) { // ๋” ์ด์ƒ ์ฝ์„๊ฒƒ์ด ์—†์„ ๋•Œ -1
        fos.write(data);
    }
    fis.close();
    fos.close();
    

    ๋‹ค์Œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด String ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค:

    FileOutputStream fos = new FileOutputStream("c:\\iotest\\stream.txt", false);
    
    String txt = "์•ˆ๋…•! Fine and strong day! im waldo!";
    
    for (int i = 0; i < txt.length(); i++) { //๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒํผ
        char c = txt.charAt(i); // ๋ฌธ์ž๋กœ ํ˜•๋ณ€ํ™˜ ํ›„
        fos.write((int) c); // ์ถœ๋ ฅ
    }
    fos.close();
    

    ๋‹จ, ์œ„ ๋ฐฉ๋ฒ•์€ ํ•œ๊ธ€์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ•œ๊ธ€์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•œ๋‹ค:

    FileOutputStream fos = new FileOutputStream("c:\\iotest\\stream.txt", false);
    String txt = "์•ˆ๋…•! Fine and strong day! im waldo!";
    fos.write(txt.getBytes());
    fos.close();
    

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

    ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด๋ผ ํ•˜๋ฉฐ ๋ฐ”์ดํŠธ๊ธฐ๋ฐ˜, ๋ฌธ์ž๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ๋ชจ๋‘ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด ์ œ๊ณต๋œ๋‹ค.

    ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ŠคํŠธ๋ฆผ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์กฐ ์ŠคํŠธ๋ฆผ๋งŒ์œผ๋กœ๋Š” ์ž…์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ณ , ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ํ˜น์€ ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ๋จผ์ € ์ƒ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ ์ด์šฉํ•ด ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•œ๋‹ค.

    // ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
    FileInputStream fis = new FileInputStream("c:\\iotest\\sample.txt");
    
    // ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ์ด์šฉํ•œ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
    BufferedInputStream bis = new BufferedInputStream(fis);
    bis.read();
    

    ์œ„๋ฅผ ๋ณด๋ฉด BufferedInputStream์˜ read()๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‹ค์ œ ์ž…๋ ฅ๊ธฐ๋Šฅ์€ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ FileInputStream์ด ์ˆ˜ํ–‰ํ•˜๊ณ  BufferedInputStream์€ ๋ฒ„ํผ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•œ๋‹ค.

    ์ด์ฒ˜๋Ÿผ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์˜ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ ์ž…์ถœ๋ ฅ์— ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋Š”๋ฐ ์–ผํ• ๋ณ„๊ฑฐ ์—†์–ด ๋ณด์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์„ ์ˆ˜๋ก ๋ฒ„ํผ๊ฐ€ ์ฒ˜๋ฆฌ ์†๋„์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.

    BufferedInputStream/BufferedOutputStream

    ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด ์ŠคํŠธ๋ฆผ์˜ ์ž…์ถœ๋ ฅ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด๋‹ค.

    ํ•œ ๋ฐ”์ดํŠธ ์”ฉ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฒ„ํผ(๋ฐ”์ดํŠธ๋ฐฐ์—ด)์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ์ž…์ถœ๋ ฅ ์ž‘์—…์— ์‚ฌ์šฉ๋œ๋‹ค.

    ์ƒ์„ฑ์ž์— ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 8192 byte์˜ ๋ฒ„ํผ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ๋ฒ„ํผ ํฌ๊ธฐ๋Š” ์ž…๋ ฅ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋กœ ์ง€์ •ํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค์นด๋”๋ผ.

    File file = new File("c:\\iotest\\sample.txt");
    
    FileInputStream fis = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(fis, 4096); // ๋ฒ„ํผ ์‚ฌ์ด์ฆˆ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    
    while (bis.available() > 0) {
        System.out.print((char) bis.read());
    }
    bis.close();
    

    ์—ฌ๊ธฐ์„œ๋Š” available()์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด๋Š” Stream ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋กœ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

    BufferedStream ์‚ฌ์šฉ ์˜ˆ

    // ํŒŒ์ผ ๋ณต์‚ฌ
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:/iotest/readme.txt"));
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:/iotest/writeme.txt"));
    
    int len = 0;
    
    while (bis.available() > 0) {
        len ++;
        bos.write(bis.read());
    }
    
    System.out.printf("์ด %,d๋ฐ”์ดํŠธ ๋ณต์‚ฌ๋จ\n", len);
    
    bos.flush();
    bis.close();
    bos.close();
    
    
    // String ์ง์ ‘ ์“ฐ๊ธฐ
    BufferedOutputStream bos2 = new BufferedOutputStream(new FileOutputStream("C:/iotest/result.txt"));
    String txt = "์•ˆ๋…•ํ•˜์‹ ๊ฐ€?\r\ngood morning!";
    bos2.write(txt.getBytes());
    bos2.flush();
    bos2.close();
    

    DataInputStream/DataOutputStream

    FileterStream์„ ์ƒ์†ํ•˜๋ฉด์„œ DataInput/DataOutput ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค. ๋ชจ๋“  ์›์‹œํ˜• ๊ฐ’์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

    DataOutputStream์€ ์ถœ๋ ฅ ์‹œ ๊ฐ ์›์‹œํ˜• ๊ฐ’์„ 16์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด intํ˜• ๊ฐ’์€ 4byte์˜ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

    DataStream์€ ๋ฌธ์ž๋ฅผ ์ง์ ‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์ด๋Š” data์™€ ๋ฌธ์ž๊ฐ„ ๋ณ€ํ™˜ ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    File file = new File("c:\\iotest\\sample.dat");
    
    // ์“ฐ๊ธฐ
    DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
    dos.writeBoolean(true);
    dos.write(5);
    dos.writeByte((byte) 5);
    dos.writeInt(100);
    dos.writeDouble(200.5);
    dos.writeUTF("utfutfutf");
    
    dos.flush();
    dos.close();
    
    // ์ฝ๊ธฐ
    DataInputStream dis = new DataInputStream(new FileInputStream(file));
    System.out.println(dis.readBoolean());
    System.out.println(dis.read());
    System.out.println(dis.readByte());
    System.out.println(dis.readInt());
    System.out.println(dis.readDouble());
    System.out.println(dis.readUTF());
    dis.close();
    

    ํŠน์ •ํ•œ ๋ณ€ํ™˜์ž‘์—…์ด๋‚˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ์…€ ํ•„์š”์—†์ด ์ฝ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š”๋ฐ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ณผ์ •์—์„œ ์ž๋ฃŒํ˜•์„ ๋‹ฌ๋ฆฌํ•ด์„œ ์ €์žฅํ•  ๊ฒฝ์šฐ ์ฝ์–ด์˜ฌ ๋•Œ๋„ ๋ฐ˜๋“œ์‹œ ๊ทธ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ฝ์–ด์™€์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์ด ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋ฉด read ๋ฉ”์„œ๋“œ๋“ค์ด ์˜ฌ๋ฐ”๋ฅธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•ด ์—‰๋šฑํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

    ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ: Reader, Writer

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ 1byte๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ 2byte ์ด์ƒ์ธ ๋ฌธ์ž๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ ์ด ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋‹ค. ๋˜ํ•œ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ๊ฐ„ ๋ณ€ํ™˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

    Reader์™€ Writer ํด๋ž˜์Šค๋Š” ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์—์„œ ์ฒ˜๋Ÿผ ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค๋“ค์ด ์ƒ์†๋ฐ›์€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ byte ๋ฐฐ์—ด์ด ์•„๋‹Œ char ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” read(), write()๊ฐ€ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

    FileReader/FileWriter

    // ์“ฐ๊ธฐ
    FileWriter out = new FileWriter("c:\\iotest\\sample.txt", true);
    //true: Append, ์ด์–ด์“ฐ๊ธฐ
    //false: Create, ๊ธฐ์กด ๋‚ด์šฉ์— ๋ฎ์–ด์“ฐ๊ธฐ
    //๊ธฐ๋ณธ๊ฐ’ : false
    
    String txt = "You just activated \r\nMY TRAP CARD \r\n๋ถ‘๋ฐฅ๋ถ‘๋ฐฅ๋ถ‘๋ฐฅ๋ฐ”";
    out.write(txt);
    out.close();
    
    // ์ฝ๊ธฐ
    FileReader in = new FileReader("c:\\iotest\\sample.txt");
    int data = 0;
    while((data = in.read()) != -1) { // ํŒŒ์ผ ๋‚ด์šฉ์˜ ๊ธธ์ด๋งŒํผ ๋ฃจํ”„
        System.out.print((char) data); // ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ - ์ถœ๋ ฅ
    }
    in.close();
    
    // ํŒŒ์ผ ๋ณต์‚ฌ
    FileReader in = new FileReader("c:\\iotest\\sample.txt");
    FileWriter out = new FileWriter("c:\\iotest\\clone.txt");
    
    int data = 0;
    while ((data = in.read()) != -1) {
        out.write(data);
    }
    
    in.close();
    out.close();
    
    // String ๋ฐ”๋กœ ์“ฐ๊ธฐ
    FileWriter out2 = new FileWriter("c:\\iotest\\result.txt");
    String txt = "์•ˆ๋…•? abcdefg\r\nhihi~";
    out2.write(txt);
    out2.close();
    

    ๋ฌธ์ž ๊ธฐ๋ฐ˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

    BufferedReader/BufferedWriter

    ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด Reader์™€ Writer์˜ ์ž…์ถœ๋ ฅ ํšจ์œจ์„ ๊ฐœ์„ ํ•œ ํด๋ž˜์Šค.

    // ์“ฐ๊ธฐ
    BufferedWriter out = new BufferedWriter(new FileWriter("c:\\iotest\\buffer.txt", false));
    out.write("๋ฒ„ํผ๋“œ๋ฆฌ๋”๋ฅผ ํ™œ์šฉํ•œ \r\nํŒŒ์ผ์ถœ๋ ฅ");
    out.flush();        
    out.close();
    
    // ์ฝ๊ธฐ
    BufferedReader in = new BufferedReader(new FileReader("c:\\iotest\\buffer.txt"));
    String data;
    while((data = in.readLine()) != null) { //์ฝ์„๊ฒŒ ์—†์œผ๋ฉด null ๋ฆฌํ„ด
        System.out.println(data);
    }
    in.close();
    
    //// read()๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
    //int data;
    //while((data = in.read()) != -1) {
    //    System.out.print((char) data);
    //}
    //in.close();
    

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ flush()๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์•„์•ผ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

    read()๋Š” stream์˜ ๊ฒฝ์šฐ์™€ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ๊ฑฐ์˜ ์ฐจ์ด๋‚˜์ง€ ์•Š์ง€๋งŒ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ readLine()์€ read()์™€ ๋‹ค๋ฅด๊ฒŒ ์ค„ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋ฉฐ ๋” ์ด์ƒ ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด -1์ด ์•„๋‹ˆ๋ผ null์„ ๋ฆฌํ„ดํ•œ๋‹ค.

    // ํŒŒ์ผ ๋ณต์‚ฌ
    BufferedReader in = new BufferedReader(new FileReader("c:\\iotest\\sample.txt"));
    BufferedWriter out = new BufferedWriter(new FileWriter("c:\\iotest\\clone.txt"));
    String data = "";
    while ((data = in.readLine()) != null) {
        out.write(data + "\r\n");
    }
    out.flush();
    in.close();
    out.close();
    
    // String ์ง์ ‘ ์“ฐ๊ธฐ
    BufferedWriter out2 = new BufferedWriter(new FileWriter("c:\\iotest\\result.txt"));
    String txt = "ํ˜ธ์˜น์ด";
    out2.write(txt);
    out2.flush();
    out2.close();
    

    ์‘์šฉ - ์„ธ๋ฏธ์ฝœ๋ก โ€;โ€์„ ํฌํ•จํ•œ ์ค„๋งŒ ์ถœ๋ ฅ

    // ์ฝ๊ธฐ
    BufferedReader in = new BufferedReader(new FileReader("c:\\iotest\\Test1.java"));
    
    String data = "";
    int cnt = 0;
    while ((data = in.readLine()) != null) {
        cnt ++;
        if (data.indexOf(";") != -1) {
            System.out.println(cnt + ":" + data);
        }
    }
    

    InputStreamReader/OutputStreamWriter

    ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    File file = new File("c:\\iotest\\sample.txt");
    InputStreamReader inStrReader = new InputStreamReader(new FileInputStream(file), "utf-8");
    BufferedReader in = new BufferedReader(inStrReader);
    
    String data = "";
    while ((data = in.readLine()) != null) {
        System.out.println(data);
    }
    in.close();
    

    ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์„ ๋• ๋ณดํ†ต ์•„๋ž˜์ฒ˜๋Ÿผ ์“ด๋‹ค:

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    //BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "utf-8"));
    

    PrintWriter

    PrintStream๋ณด๋‹ค ํ–ฅ์ƒ๋œ ๋ฌธ์ž๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์ด๋‹ค. JDK1.1์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

    // PrintStream
    System.out.println("hi"); //new PrintStream(System.out).println("hello world");
    
    // PrintWriter
    PrintWriter pw = new PrintWriter(System.out);
    pw.write("hi");
    pw.flush();
    pw.close();