๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SpringMVCStudy/FileSystemApp

โ— FileSystemApp 01 ~ 05

by ๋‹‰๋„ค์ž„์—†๋Š” ๋‹‰๋„ค์ž„ 2024. 1. 29.
TOP

๋ชฉ์ฐจ

    โ– โ– โ–  ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ โ– โ– โ– 

    โ– โ– โ–  ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ.txt โ– โ– โ– 

    ๋”๋ณด๊ธฐ

    โ– โ– โ–  ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ.txt โ– โ– โ– 

    โ—‹ java.io.FileInputStream ํด๋ž˜์Šค

      ์ž๋ฐ”์—์„œ๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด
      FileInputStream ํด๋ž˜์Šค์™€ FileOutputStream ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

      โ€ป  FileInputStream ํด๋ž˜์Šค
    : ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
      โ€ป  FileInputStream ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ๋•Œ์—๋Š”
          ๋ฐ์ดํ„ฐ์†Œ์Šค์ธ ํŒŒ์ผ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
          (์ด ๋•Œ, ์ง€์ •ํ•œ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ IOExcepion ๋ฐœ์ƒ)
      โ€ป  FileInputStream ํด๋ž˜์Šค๋Š” Inputstream ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ
          InputStream ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
          (InputStream ํด๋ž˜์Šค๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„ ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๋ฉฐ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.)

      - ์ƒ์„ฑ์ž
      · FileInputStream(File file)
         : ์ฃผ์–ด์ง„ File ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•œ
           FileInputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      · FileInputStream(FileDescriptor fdObj)
         : ์ฃผ์–ด์ง„ FileDescriptor ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•œ
           FileInputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
      · FileInputStream(String name)
         : ์ฃผ์–ด์ง„ ์ด๋ฆ„์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•œ
           FileInputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    โ—‹ java.io.FileOutputStream ํด๋ž˜์Šค

       FileOutputStream ํด๋ž˜์Šค๋Š”
       ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
       ํŒŒ์ผ๋ช…์ด๋‚˜ File ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ
       ์‹œ์Šคํ…œ์— ํŒŒ์ผ์„ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
       ๊ธฐ๋ณธ์ ์œผ๋กœ(default) ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฎ์—ˆ๊ธ”๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—
       ๊ธฐ์กด์˜ ๋‚ด์šฉ์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

       โ€ปFileOutputStream ํด๋ž˜์Šค๋Š” OutputStream ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ
         OutputStream ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†๋ฐ›๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.   

      - ์ƒ์„ฑ์ž
      · FileOutputStream(File file)
         : ์ฃผ์–ด์ง„ File ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ
           FileOutputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
           ๊ธฐ์กด์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ (default) ๊ทธ ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ 
           ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.(๋ฎ์–ด์“ฐ๊ธฐ)
      · FileOutputStream(FileDescriptor fdObj)
         : ์ฃผ์–ด์ง„ FileDescriptor ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ
           FileOutputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
           ๊ธฐ์กด์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ (default) ๊ทธ ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ 
           ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.(๋ฎ์–ด์“ฐ๊ธฐ)
      · FileOutputStream(String name)
         : ์ฃผ์–ด์ง„ ์ด๋ฆ„์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ
           FileOutputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
           ๊ธฐ์กด์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ (default) ๊ทธ ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ 
           ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.(๋ฎ์–ด์“ฐ๊ธฐ)
      · FileOutputStream(String name, boolean append)
         : ์ฃผ์–ด์ง„ ์ด๋ฆ„์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•œ
           FileOutputStream ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
           ๊ธฐ์กด์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ append ๋กœ ์„ค์ •๋œ ๊ฐ’์— ๋”ฐ๋ผ(true / false)
           ๊ทธ ๋‚ด์šฉ์„ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜(false) ๊ธฐ์กด์˜ ๋‚ด์šฉ์— ์ถ”๊ฐ€ํ•œ๋‹ค.(true)

    โ—‹ java.io.FileReader ํด๋ž˜์Šค

      FileReader ํด๋ž˜์Šค๋Š”
      ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ”์ดํŠธ๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฝ์–ด๋“ค์ด๊ณ ,
      ํŒŒ์ผ ์“ฐ๊ธฐ ํด๋ž˜์Šค์ธ FileWriter ํด๋ž˜์Šค๋Š”
      ์ถœ๋ ฅํ•  ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด์„ ์‹œ์Šคํ…œ์— ๋งž๋Š” ๋””ํดํŠธ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ
      ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

      FileReader ํด๋ž˜์Šค๋Š”
      ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์„ ์ฝ์–ด๋“ค์ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ,
      ์ด ํด๋ž˜์Šค๋Š” InputStreamReader ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ๊ฒƒ์œผ๋กœ
      ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ์ฝ์–ด์„œ ๊ทธ ๋ฐ”์ดํŠธ๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ
      ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

      FileReader ํด๋ž˜์Šค ์—ญ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ์†Œ์Šค์ธ ํŒŒ์ผ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋ฉฐ,
      ์ง€์ •ํ•œ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ FileNotFoundException ์„ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

      - ์ƒ์„ฑ์ž 
    ·FileReader(File file)
      : ์ฃผ์–ด์ง„ File ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ FileReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
    ·FileReader(FileDescriptor fd)
      : ์ฃผ์–ด์ง„ FileDescriptor ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ FileReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
    ·FileReader(String fileName)
      : ์ฃผ์–ด์ง„ ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ์—ด์–ด FileReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

    โ—‹ java.io.FileWriter ํด๋ž˜์Šค

      FileWriter ํด๋ž˜์Šค๋Š”
      ํŒŒ์ผ ๋ฌธ์ž ์ถœ๋ ฅ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅํ•  ๋ฌธ์ž๋ฅผ ๋””ํดํŠธ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ
      ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
      ์ด ํด๋ž˜์Šค๋Š” OutputStreamWriter ํด๋ž˜์Šค์˜ ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ
      ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.
      FileOutputStream ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ
      ํŒŒ์ผ๋ช…์ด๋‚˜ File ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ
      ์‹œ์Šคํ…œ์— ํŒŒ์ผ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
      ๊ธฐ๋ณธ์ ์œผ๋กœ(default) ํ•ด๋‹น ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ ํ•˜๊ฒŒ ๋œ๋‹ค.

      - ์ƒ์„ฑ์ž
    ·FileWriter(File file)
      : ์ฃผ์–ด์ง„ File ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ FileWriter ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    ·FileWriter(FileDescriptor fd)
      : ์ฃผ์–ด์ง„ FileDescriptor ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ FileWriter ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    ·FileWriter(String fileName)
      : ์ฃผ์–ด์ง„ ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ์—ด์–ด FileWriter ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    ·FileWriter(String fileName, boolean append)
      : ์ฃผ์–ด์ง„ ํŒŒ์ผ์„  append ๊ฐ’์— ๋”ฐ๋ผ(true / false)
            ์ฝ๊ธฐ / ์ถ”๊ฐ€ ๋ชจ๋“œ๋กœ ์—ด์–ด FileWriter ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

    โ€ป ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ด€๋ จ(๊ด€๋ฆฌ) ํด๋ž˜์Šค → java.io.File ํด๋ž˜์Šค

      File ํด๋ž˜์Šค๋Š” ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋กœ
      ํŒŒ์ผ์˜ ๋ณต์‚ฌ ๋˜๋Š” ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋“ฑ์˜ ์กฐ์ž‘์„ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ๋  ๋ฟ
      ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ž…์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค.
      ์ž๋ฐ”์—์„œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์ž…์ถœ๋ ฅ์„ ใ€Ž์Šค.ํŠธ.๋ฆผใ€์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 
      File ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.
      ๋‹จ, File ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
      ์ฆ‰, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด File ๊ฐ์ฒด์— ์˜ํ•ด ํ‘œํ˜„๋˜๋Š” ์ถ”์ƒ ๊ฒฝ๋กœ๋ช…์€ ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    โ€ป ํŒŒ์ผ ์—…๋กœ๋“œ

      ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ํผ์„ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ
      - form ํƒœ๊ทธ ์•ˆ์—.. input ํƒœ๊ทธ์˜ type ์†์„ฑ์˜ ์†์„ฑ๊ฐ’์ด
        file ์ธ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”์ฐฝ์„ ์ œ๊ณตํ•œ๋‹ค.
      - ์ด ๋•Œ, method ์˜ ์†์„ฑ์€ post ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ,
        enctype ์†์„ฑ์˜ ์†์„ฑ๊ฐ’์€ ใ€Ž"multipart/form-data"ใ€๋กœ ์ง€์ •ํ•œ ํผ์„ ์ „์†กํ•  ๊ฒฝ์šฐ
      - ๋‹จ, ใ€Ž"multipart/form-data"ใ€๋กœ ์ง€์ •ํ•œ ํผ์„ ์ „์†กํ•  ๊ฒฝ์šฐ
        request ๊ฐ์ฒด๋กœ ์–ป์–ด๋‚ธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๊ฐ’์„ ์–ป์–ด๋‚ผ ์ˆ˜ ์—†๋‹ค.
        ์ด ๋ง์€ ใ€Ž<input type="file">ใ€๋กœ ์ง€์ •๋œ ํŒŒ์ผ์„
        ์„œ๋ฒ„ ์ƒ์˜ ํŠน์ • ๊ฒฝ๋กœ์— ์—…๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ใ€ŽํŠน๋ณ„ํ•œ ์ปดํฌ๋„ŒํŠธใ€๊ฐ€
        ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.


    โ€ป ํŠน๋ณ„ํ•œ ์ปดํฌ๋„ŒํŠธ : ใ€Žcos.jarใ€
     
      - ๋‹ค์šด๋กœ๋“œ URL → http://www.servlets.com/cos
      - ๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ → cos-22.05.zip

    [ FileSystemApp01 ]

    AppRoot.jsp

    <%@page import="java.io.File"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	String appRoot = "/";
    	appRoot = pageContext.getServletContext().getRealPath(appRoot);
    	
    	File newFile = new File(appRoot, "data/test.txt");
    
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>AppRoot.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>๊ด€์ฐฐ</h1>
    	<hr>
    </div>
    
    <div>
    	<h2>์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฃจํŠธ : <%=appRoot %></h2>
    	<!--
    	C:\SpringMVCStudy\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FileSystemApp01\  
    	-->
    	
    	<h2>์ƒ์„ฑํ•  ํŒŒ์ผ ์œ„์น˜ : <%=newFile %></h2>
    	<!--  
    	C:\SpringMVCStudy\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FileSystemApp01\data\test.txt
    	-->
    </div>
    
    </body>
    </html>

    [ FileSystemApp02 ]

    FileWrite.jsp

    <%@page import="java.io.PrintWriter"%>
    <%@page import="java.io.FileWriter"%>
    <%@page import="java.io.File"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* FileWrite.jsp */
    	
    	String appRoot = "/";
    	appRoot = pageContext.getServletContext().getRealPath(appRoot);
    	
    	// 1. ํŒŒ์ผ์„ ์“ฐ๊ธฐ ์œ„ํ•ด File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    	File newFile = new File(appRoot, "data/test.txt");
    	
    	// 2. ํŒŒ์ผ์ด ์กด์žฌํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด...
    	if ( !newFile.getParentFile().exists() )
    	{
    		// ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ณณ๊นŒ์ง€์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑ
    		newFile.getParentFile().mkdirs();
    	}
    	
    	// 3-1. ํŒŒ์ผ์„ ์“ฐ๊ธฐ ์œ„ํ•œ FileWriter ๊ฐ์ฒด ์ƒ์„ฑ
    	//    → ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ผ์— ๋‚ด์šฉ์„ ๊ธฐ๋ก
    	FileWriter fw = new FileWriter(newFile);
    	
    	// 3-2. FileWriter ๊ฐ์ฒด๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด PrintWriter ๋กœ ๊ฐ์‹ธ์คŒ → ์—ฌ๊ณผ์žฅ์น˜
    	PrintWriter pw = new PrintWriter(fw);
    	
    	// 4. ์‹ค์งˆ์ ์œผ๋กœ ํŒŒ์ผ์— ๋‚ด์šฉ์„ ์”€(๊ธฐ๋ก)
    	pw.println("ํ…Œ์ŠคํŠธ์ด๋‹ค...");
    	pw.println("ํ™•์ธํ•ด๋ณด์ž...");
    	
    	// 5-1. PrintWriter ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ(๋‹ซ์•„์คŒ)
    	pw.close();
    
    	// 5-2. FileWriter ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ(๋‹ซ์•„์คŒ)
    	fw.close();
    	
    %>

     

    FileRead.jsp

    <%@page import="java.io.BufferedReader"%>
    <%@page import="java.io.FileReader"%>
    <%@page import="java.io.File"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* FileRead.jsp */
    	
    	String appRoot = "/";
    	appRoot = pageContext.getServletContext().getRealPath(appRoot);
    	
    	// 1. ํŒŒ์ผ์„ ์ฝ๊ธฐ ์œ„ํ•ด File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    	File newFile = new File(appRoot, "data/test.txt");
    	
    	// 2. ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€์˜ ์—ฌ๋ถ€ ํ™•์ธ
    	//    → ์ง€์ •๋œ ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ
    	//       ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ฒ˜๋ฆฌํ•˜์—ฌ FileNotFoundException ๋ฐฉ์ง€
    	if (newFile.exists())
    	{
    		// 3.1 - ํŒŒ์ผ์„ ์ฝ๊ธฐ ์œ„ํ•œ FileReader ๊ฐ์ฒด ์ƒ์„ฑ
    		FileReader fr = new FileReader(newFile);
    		
    		// 3-2. FileReader ๊ฐ์ฒด๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด
    		//      BufferedReader ๋กœ ๊ฐ์‹ธ๊ธฐ
    		BufferedReader br = new BufferedReader(fr);
    		
    		// 4. ์‹ค์งˆ์ ์œผ๋กœ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด๋ƒ„
    		String readData;
    		while( (readData=br.readLine()) != null )	// ๋ผ์ธ๋ณ„๋กœ ์ฝ์–ด๋“ค์ด๋Š” ๊ธฐ๋Šฅ ๋ฐ˜๋ณต
    		{
    			out.println(readData + "<br>");
    		}
    		
    		// 5-1. BufferedReader ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ(๋‹ซ์•„์คŒ)
    		br.close();
    		
    		// 5-2. FileReader ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ(๋‹ซ์•„์คŒ)
    		fr.close();		
    	}
    	else	// ์ง€์ •๋œ ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ
    	{
    		out.println("์ •์ƒ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
    	}
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>FileRead.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    </body>
    </html>

    [ FileSystemApp03 ]

    ObjectWrite.jsp

    <%@page import="java.io.ObjectOutputStream"%>
    <%@page import="java.io.FileOutputStream"%>
    <%@page import="java.util.Hashtable"%>
    <%@page import="java.io.File"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* ObjectWrite.jsp */
    	
    	String appRoot = "/";
    	appRoot = pageContext.getServletContext().getRealPath(appRoot);
    	
    	// ํ…Œ์ŠคํŠธ
    	System.out.println(appRoot);
    	
    	// ํŒŒ์ผ ๊ฐ์ฒด ์ƒ์„ฑ
    	File newFile = new File(appRoot, "objData/data.ser");
    	//-- ๊ฐ์ฒด ์ง๋ ฌํ™”
    	
    	// ํŒŒ์ผ์ด ์กด์žฌํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋Š”
    	// ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ๊นŒ์ง€์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.
    	if ( !newFile.getParentFile().exists() )
    	{
    		newFile.getParentFile().mkdirs();
    	}
    	
    	// ํŒŒ์ผ์— ๋„ฃ๊ธฐ ์œ„ํ•œ Hashtable ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ์— ํฌํ•จ์‹œํ‚จ๋‹ค.
    	Hashtable<String, String> h = new Hashtable<String, String>();
    	
    	h.put("key1", "์‚ฌ๊ณผ");
    	h.put("key2", "์ˆ˜๋ฐ•");
    	
    	// ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ์ŠคํŠธ๋ฆผ ๊ตฌ์„ฑ
    	FileOutputStream fos = new FileOutputStream(newFile);
    	
    	// Object ๋ฅผ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ObjectOutputStream ๊ฐ์ฒด ์ƒ์„ฑ
    	// → ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋กœ FileOutputStream ๊ฐ์ฒด ๊ฐ์‹ธ๊ธฐ
    	ObjectOutputStream oos = new ObjectOutputStream(fos);
    	
    	// ObjectOutputStream ์„ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ์— Object ๋ฅผ ๊ธฐ๋ก
    	oos.writeObject(h);
    	
    	// ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ
    	oos.close();
    	fos.close();
    	
    	
    // ์•„๋ž˜ ๋ณด์—ฌ์ฃผ๋Š” ํ…œํ”Œ๋ฆฟ ์ œ๊ฑฐ	
    	
    %>

    ObjectRead.jsp

    <%@page import="java.util.Enumeration"%>
    <%@page import="java.util.Hashtable"%>
    <%@page import="java.io.ObjectInputStream"%>
    <%@page import="java.io.FileInputStream"%>
    <%@page import="java.io.File"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* ObjectRead.jsp */
    
    	String appRoot = "/";
    	appRoot = pageContext.getServletContext().getRealPath(appRoot);
    	
    	File newFile = new File(appRoot, "objData/data.ser");
    	
    	// ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์ฒ˜๋ฆฌ
    	if ( newFile.exists() )
    	{
    		// ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด FileInputStream ๊ฐ์ฒด ์ƒ์„ฑ
    		FileInputStream fis = new FileInputStream(newFile);
    		
    		// ํŒŒ์ผ์—์„œ Object ๋ฅผ ์ฝ์–ด๋“ค์ด๊ธฐ ์œ„ํ•ด ObjectInputStream ๊ฐ์ฒด ์ƒ์„ฑ
    		ObjectInputStream ois = new ObjectInputStream(fis);
    		
    		// ObjectInputStream ์„ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ Object ์ฝ์–ด์˜ค๊ธฐ
    		// ์ฝ์–ด์˜จ Object ๋ฅผ ์›๋ž˜์˜ ํ˜•(ํƒ€์ž…)์œผ๋กœ ์บ์ŠคํŒ…
    		Hashtable h = (Hashtable)ois.readObject();
    		
    		ois.close();
    		fis.close();
    		
    		Enumeration e = h.keys();
    		while (e.hasMoreElements())
    		{
    			String key = (String)e.nextElement();
    			String value = (String)h.get(key);
    			
    			%>
    			
    			<%=key %> ์˜ ๊ฐ’์€ <%=value %> ์ž…๋‹ˆ๋‹ค. <br>
    			
    			<%
    			
    		}
    	}
    	else
    	{
    		out.println("ํ•ด๋‹น ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค~!!!");
    	}
    		
    	
    // ์•„๋ž˜ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ๋ชจ๋‘ ์ œ๊ฑฐ	
    %>

    [ FileSystemApp04 ]

    Send.jsp

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Send.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ</h1>
    	<hr />
    </div>
    
    <div>
    	<!-- ใ€Ženctype="multipart/form-data"ใ€ : ํŒŒ์ผ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—…๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ -->
    	<!-- ใ€Žmethod="post"ใ€ : ํŒŒ์ผ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—…๋กœ๋“œ ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ ๋ฐ ์ „์†ก ๋ฐฉ์‹ -->
    	<form action="Receive.jsp" method="post" enctype="multipart/form-data">
    		
    		์ด๋ฆ„ : <input type="text" name="name"/>
    		<br>
    		
    		<!-- ํŒŒ์ผ ์—…๋กœ๋“œ ๋Œ€ํ™”์ฐฝ ๊ตฌ์„ฑ -->
    		ํŒŒ์ผ : <input type="file" name="upload"/>
    		<br>
    		
    		<!-- submit ์•ก์…˜ ์ฒ˜๋ฆฌ -->
    		<button type="submit" class="btn">์ „์†ก</button>
    		
    	</form>
    </div>
    
    <!--
    	โ€ป ใ€ŽSend.jspใ€์˜ form ์—˜๋ฆฌ๋จธํŠธ enctype ์†์„ฑ์˜ ์†์„ฑ๊ฐ’์„
    	   ใ€Ženctype="multipart/form-dataใ€์™€ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ
    	   form ์˜ ๋‚ด์šฉ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์˜ ํ˜•ํƒœ๋กœ ์ „์†กํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ™œ์šฉ๋˜๋ฉฐ,
    	   ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ „์†กํ•  ๊ฒฝ์šฐ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋Š”
    	 
    		์ด๋ฆ„ : null
    		ํŒŒ์ผ : null
    		
    	   ๋กœ ํ™•์ธ๋œ๋‹ค.
    	   
    	   ==> ์ด๋Š”, ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ getParameter() ๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.	   
    -->
    
    </body>
    </html>

    Receive.jsp

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	// ์ด์ „ ํŽ˜์ด์ง€(Send.jsp)๋กœ๋ถ€ํ„ฐ ๋„˜์–ด์˜จ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
    	// → name, upload
    	String name = request.getParameter("name");
    	String upload = request.getParameter("upload");
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Receive.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<!-- ์ด๋ฆ„ : ์–ด์ฉŒ๊ตฌ<br> -->
    	์ด๋ฆ„ : <%=name %><br>
    	
    	<!-- ํŒŒ์ผ : ์ €์ฉŒ๊ตฌ<br> -->
    	ํŒŒ์ผ : <%=upload %><br>
    </div>
    
    </body>
    </html>

    [ FileSystemApp05 ]

    UploadForm.jsp

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>UploadForm.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>ํŒŒ์ผ ์ž…๋ ฅ ํผ</h1>
    	<hr />
    </div>
    
    <div>
    	<form action="Receive.jsp" method="post" enctype="multipart/form-data">
    		
    		file : <input type="file" name="file" size="50" />
    		<br>
    		
    		text : <input type="text" name="data" size="30" />
    		<br>
    		
    		<input type="submit" value="upload" />
    		
    		
    	</form>
    </div>
    
    </body>
    </html>

    Receive.jsp

    <%@page import="java.io.DataInputStream"%>
    <%@page import="java.util.Enumeration"%>
    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <%
    	/* Receive.jsp */
    	
    	String contentType = request.getContentType();
    	Enumeration e = request.getHeaderNames();
    	
    	out.println("[[ ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋‚ ์•„์˜ค๋Š” ํ—ค๋” ์ •๋ณด๋“ค ]]<br>");
    	
    	while(e.hasMoreElements())
    	{
    		String key = (String)e.nextElement();
    		String value = request.getHeader(key);
    		
    		out.println(key +  " " + value + "<br>");
    		
    	}
    	
    	out.println("[[ request ๋กœ ๋„˜์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋“ค ]]<br>");
    	
    	DataInputStream dis = new DataInputStream(request.getInputStream());
    	
    	String line = null;
    	while((line=dis.readLine()) != null)
    	{
    		//out.println(new String(line.getBytes("UTF-8"), "UTF-8") + "<br>");
    		out.println(new String(line.getBytes("ISO-8859-1"), "UTF-8") + "<br>");
    	}
    	
    // ์•„๋ž˜ ๋ณด์—ฌ์ฃผ๋Š” ํ…œํ”Œ๋ฆฟ ๋ชจ๋‘ ์ œ๊ฑฐ	
    %>

     

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

    โ— FileSystemApp 06 ~ 08  (0) 2024.01.30