nyximos.log

[Java] I/O ๋ณธ๋ฌธ

Programming/JAVA

[Java] I/O

nyximos 2022. 9. 21. 20:06

๐Ÿ‘ฉ‍๐Ÿš€ ๋ชฉํ‘œ

์ž๋ฐ”์˜ Input๊ณผ Ontput์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์„ธ์š”.

๐Ÿ‘ฉ‍๐Ÿ’ป ํ•™์Šตํ•  ๊ฒƒ

  • ์ŠคํŠธ๋ฆผ (Stream) / ๋ฒ„ํผ (Buffer) / ์ฑ„๋„ (Channel) ๊ธฐ๋ฐ˜์˜ I/O
  • InputStream๊ณผ OutputStream
  • Byte์™€ Character ์ŠคํŠธ๋ฆผ
  • ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ (System.in, System.out, System.err)
  • ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ

 

 

 

I/O ์ž…์ถœ๋ ฅ

  • Input/Output์˜ ์•ฝ์ž, ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋œปํ•œ๋‹ค.
  • ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ์žฅ์น˜์™€ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๊ฒƒ
  • ex) ํ‚ค๋ณด๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ, System.out.println()์„ ์ด์šฉํ•ด ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
  • I/O : ์ŠคํŠธ๋ฆผ ๋ฐฉ์‹, ๋น„๋™๊ธฐ ์ง€์› ๐Ÿ™…‍โ™€๏ธ, Blocking ์ง€์›,  ๋ฒ„ํผ๐Ÿ™…‍โ™€๏ธ
  • NIO : ์ฑ„๋„๋ฐฉ์‹, ๋น„๋™๊ธฐ ์ง€์› ๐Ÿ™†‍โ™€๏ธ, Blocking/Non-Blocking ์ง€์›, ๋ฒ„ํผ๐Ÿ™†‍โ™€๏ธ

 

 

์ŠคํŠธ๋ฆผ stream

  • ํ•œ ์ชฝ์—์„œ ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๋Œ€์ƒ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ฒฐ ํ†ต๋กœ
  • ๋‹จ๋ฐฉํ–ฅํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅ → ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.
  • ๐Ÿค” ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด?
    • ์ž…๋ ฅ์ŠคํŠธ๋ฆผ input stream๊ณผ ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ output stream, ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์ด ํ•„์š”ํ•˜๋‹ค.
  • Queue์™€ ๊ฐ™์€ FIFO ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.
    • ๋จผ์ € ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ›๊ณ  ์ค‘๊ฐ„์— ๊ฑด๋„ˆ๋œ€ ์—†์ด ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

[๊ทธ๋ฆผ ์ฒจ๋ถ€]

 

 

NIO New Input/Output

  • ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ
  • Java 4๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ์ž…์ถœ๋ ฅ API๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • ๋น„๋™๊ธฐ ์ง€์›๐Ÿ™†‍โ™€๏ธ, Non-blocking IO API ์ œ๊ณต
  • Channel ๊ธฐ๋ฐ˜
    • ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ฌ๋ฆฌ ์–‘๋ฐฉํ–ฅ ์ž…์ถœ๋ ฅ ๊ฐ€๋Šฅ
    • ํ•˜๋‚˜์˜ ์ฑ„๋„๋กœ ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ชจ๋‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ˜ต Blocking๊ณผ Non-blocking

๊ด€์‹ฌ์‚ฌ : ์ œ์–ด๊ถŒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ๋Š”๊ฐ€

 

Blocking

  • ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
  • A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ, A์—์„œ B์—๊ฒŒ๋กœ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.
    A ํ•จ์ˆ˜๋Š” ์ œ์–ด๊ถŒ์ด ์—†์œผ๋ฏ€๋กœ ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ 
    B ํ•จ์ˆ˜ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’๊ณผ ์ œ์–ด๊ถŒ์„ Aํ•จ์ˆ˜์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

Non-Blocking

  • ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€ ์—†์ด ๋‹ค์Œ ์ž‘์—… ์ˆ˜ํ–‰
  • ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ I/O ์ฒ˜๋ฆฌ
  • A ํ•จ์ˆ˜๊ฐ€ B ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ, B ํ•จ์ˆ˜๋Š” ์‹คํ–‰๋˜์ง€๋งŒ A ํ•จ์ˆ˜๊ฐ€ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    B ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š๋”๋ผ๋„ A๋Š” ๊ณ„์† ์‹คํ–‰ํ•œ๋‹ค. 

 

 

๋ฒ„ํผ (Buffer) 

  • ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— OS์˜ API ํ˜ธ์ถœ ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค → ์ž…์ถœ๋ ฅ ์„ฑ๋Šฅ ๊ฐœ์„ 
  • ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ๋”ฐ๋ผ ์ข…๋ฅ˜์— ๋‚˜๋‰œ๋‹ค.
    -Buffer
        - ByteBuffer
              - MappedByteBuffer
        - CharBuffer
        - ShortBuffer
        - DoubleBuffer
        - FloatBuffer
        - IntBuffer
        - LongBuffer
        - ShortBuffer

https://docs.oracle.com/javase/8/docs/api/java/nio/package-summary.html#buffers

 

 

์ฑ„๋„ (Channel)

  • ๋ฐ์ดํ„ฐ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ์ŠคํŠธ๋ฆผ
  • file๊ณผ socket ๊ฐ™์€ I/O ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • FileChannel
    • SocketChannel
    • DatagramChannel
    • AsynchronounsChannel
  • ์–‘๋ฐฉํ–ฅ ์ž…์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

https://docs.oracle.com/javase/8/docs/api/java/nio/channels/package-summary.html#package.description

 

 

 

InputStream๊ณผ OutputStream

๋ชจ๋“  ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ ์กฐ์ƒ

InputStream

์ด ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋ฐ”์ดํŠธ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ˆ˜ํผ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • int available() : ์Šฝ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • void close() : ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์Œ์œผ๋กœ์จ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ์ž์›์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • void mark(int readlimit) : ํ˜„์žฌ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•ด ๋†“๋Š”๋‹ค. readlimit๋Š” ๋˜๋Œ์•„ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” byte์˜ ์ˆ˜์ด๋‹ค.
  • boolean markSupported() : mark()์™€ reset()์„ ์ง€์›ํ•˜๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค.
  • abstract int read() :  ๋‹ค์Œ 1byte๋ฅผ ์ฝ์–ด์˜จ๋‹ค. ์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • int read(byte[] b) : ๋ฐฐ์—ด b์˜ ํฌ๊ธฐ๋งŒํผ ์ฝ์–ด์„œ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๊ณ  ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • int read(byte[] b, int off, int len) : ์ตœ๋Œ€ len๊ฐœ์˜ byte๋ฅผ ์ฝ์–ด์„œ ๋ฐฐ์—ด b์˜ ์ง€์ •๋œ ์œ„์น˜ off ๋ถ€ํ„ฐ ์ €์žฅํ•œ๋‹ค.
  • void reset() : ์ŠคํŠธ๋ฆผ์—์„œ์˜ ์œ„์น˜๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ mark()์ด ํ˜ธ์ถœ๋˜์—ˆ๋˜ ์œ„์น˜๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
  • long skip(long n) : ์ŠคํŠธ๋ฆผ์—์„œ ์ฃผ์–ด์ง„ ๊ธธ์ด  n๋งŒํผ ๊ฑด๋„ˆ๋›ด๋‹ค.

https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

 

OutputStream

์ด ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋ฐ”์ดํŠธ์˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ˆ˜ํผ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • void close() : ์ž…๋ ฅ ์†Œ์Šค๋ฅผ ๋‹ซ์Œ์œผ๋กœ์จ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ์ž์›์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • void flush() : ์ŠคํŠธ๋ฆผ์˜ ๋ฒ„ํผ์— ์žˆ๋Š” ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅ ์†Œ์Šค์— ์“ด๋‹ค.
  • abstract void write(int b) : ์ฃผ์–ด์ง„ ๊ฐ’์„ ์ถœ๋ ฅ์†Œ์Šค์— ์“ด๋‹ค.
  • void write(byte[] b) : ์ฃผ์–ด์ง„ ๋ฐฐ์—ด b์— ์ €์žฅ๋œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅ ์†Œ์Šค์— ์“ด๋‹ค.
  • void write(byte[] b, int off, int len) : ์ฃผ์–ด์ง„ ๋ฐฐ์—ด b์— ์ €์žฅใ…‡๋œ ๋‚ด์šฉ ์ค‘์—์„œ off ๋ฒˆ์งธ๋ถ€ํ„ฐ len๊ฐœ ๋งŒํผ๋งŒ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅ ์†Œ์Šค์— ์“ด๋‹ค.

 

 

 

Byte์™€ Character ์ŠคํŠธ๋ฆผ

Byte Stream

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

์ž…์ถœ๋ ฅ ๋‹จ์œ„๊ฐ€ 1๋ฐ”์ดํŠธ

์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ด๋‹ค.

  • InputStream/OutputStream : ์ตœ๊ณ  ์กฐ์ƒ
  • FileInputStream/FileOutputStream : ํŒŒ์ผ
  • ByteArrayInputStream/ByteArrayOutputStream : ๋ฉ”๋ชจ๋ฆฌ (byte ๋ฐฐ์—ด)
  • PipeInputStream/PipeOutputStream : ํ”„๋กœ์„ธ์Šค (ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ํ†ต์‹ )
  • AudioInputStream/AudioOutputStream : ์˜ค๋””์˜ค ์žฅ์น˜

Character Stream

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

C์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ Java์—์„œ๋Š” ํ•œ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๋Š” charํ˜•์ด 2byte์ด๋ฏ€๋กœ ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด์žˆ๋‹ค.

์ด ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ์ œ๊ณตํ•œ๋‹ค.

๋‹จ์ˆœํžˆ 2๋ฐ”์ดํŠธ๋กœ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋งŒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ํ•„์š”ํ•œ ๋˜ ํ•˜๋‚˜์˜ ์ •๋ณด๋Š” ์ธ์ฝ”๋”ฉ์ด๋‹ค.

๋ฌธ์ž๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ ์œ ๋‹ˆ์ฝ”๋“œ(UTF-16) ๊ฐ„์˜ ๋ณ€ํ™˜์„ ์ž๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. (์ž๋ฐ”๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž๋ฅผ ์ €์žฅ)

Reader : ํŠน์ • ์ธ์ฝ”๋”ฉ์„ ์ฝ์–ด์„œ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜

Writer : ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ํŠน์ • ์ธ์ฝ”๋”ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ

  • FileReader/FileWriter
  • CharArrayReader/CharArrayWriter
  • PipeReader/PipeWriter
  • StringReader/StringWriter :

 

 

 

ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ (System.in, System.out, System.err)

์ฝ˜์†”(console,  ๋„์Šค์ฐฝ)์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์ฝ˜์†”๋กœ์˜ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์„ ์˜๋ฏธ

์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • System.in : ์ฝ˜์†”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉ (ํ‘œ์ค€ ์ถœ๋ ฅ)
  • System.out : ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ (ํ‘œ์ค€ ์ž…๋ ฅ)
  • System.err : ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ (ํ‘œ์ค€ ์ž…๋ ฅ)

Systemํด๋ž˜์Šค์˜ ์†Œ์Šค์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด in, out, err์€ System ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋ณ€์ˆ˜(static ๋ณ€์ˆ˜)์ด๋‹ค.

์„ ์–ธ ๋ถ€๋ถ„๋งŒ ๋ด์„œ๋Š” out, err, in ์˜ ํƒ€์ž…์€ InputStream๊ณผ PrintStream์ด์ง€๋งŒ,

์‹ค์ œ๋กœ๋Š” ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋Š” BufferedInputStream๊ณผ BufferedOutputStream์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ

๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ

  • FileInputStream, FileOutputStream ์ด์šฉํ•ด์„œ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์„ ์ฝ๊ณ  ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ
  • ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์ž…์ถœ๋ ฅ ์‚ฌ์šฉ
public class FileTest {
    public static void main(String[] args) throws IOException {
    	
        FileInputStream in = null;
        FileOutputStream out = null;
        
        try {
        
            in = new FileInputStream("C:/input.txt");		// ํŒŒ์ผ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
            out = new FileOutputStream("C:/output.txt");	// ํŒŒ์ผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
            int c;
            
            // ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ๋•Œ๋Š” read()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 
            // ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ์“ธ ๋•Œ๋Š” write()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
            while ((c = in.read()) != -1 ){
            	out.write(c);
            }
        
        } finally {
        	if (in != null){
            	in.close();
            }
            if (out != null){
            	out.close();
           	}
        }
    }
}

 

๋ฌธ์ž ์ŠคํŠธ๋ฆผ

  • ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•
  • FileInputStream๊ณผ FIleOutputStream ๋Œ€์‹ ์— FileReader์™€ FileWriter๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
public class FileTest {
    public static void main(String[] args) throws IOException {
    	
        FileReader in = null;
        FileWriter out = null;
        
        try {
        
            in = new FileReader("C:/input.txt");		// ํŒŒ์ผ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
            out = new FileWriter("C:/output.txt");	// ํŒŒ์ผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ
            int c;
            
            // ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ๋•Œ๋Š” read()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 
            // ํ•˜๋‚˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ์“ธ ๋•Œ๋Š” write()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
            while ((c = in.read()) != -1 ){
            	out.write(c);
            }
        
        } finally {
        	if (in != null){
            	in.close();
            }
            if (out != null){
            	out.close();
           	}
        }
    }
}

 

 

 

 

 

https://docs.oracle.com/javase/tutorial/essential/io/index.html

๋‚จ๊ถ์„ฑ, ์ž๋ฐ”์˜ ์ •์„ ๊ธฐ์ดˆํŽธ, ๋„์šฐ์ถœํŒ, 201
์ฒœ์ธ๊ตญ, ์–ด์„œ์™€ JAVA๋Š” ์ฒ˜์Œ์ด์ง€!, INFINITYBOOKS, 2015

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐ŸŽง ์šฐ์˜ Block vs Non-Block & Sync vs Async

๋™๊ธฐ/๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น

 

 

'Programming > JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ๋žŒ๋‹ค์‹  (0) 2023.03.29
[Java] ์ œ๋„ค๋ฆญ  (1) 2022.09.26
[Java] ์• ๋…ธํ…Œ์ด์…˜  (1) 2022.09.11
[Java] Enum  (1) 2022.09.08
[Java] ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2022.09.06