๐Ÿ’ป JAVA_

JAVA#20 _ ํŒŒ์ผ ์ž…์ถœ๋ ฅ๊ณผ ์Šค๋ ˆ๋“œ

CodeLoge 2025. 1. 21. 17:46

#1. ํŒŒ์ผ ์ž…์ถœ๋ ฅ(๊ธ€)

: ํŒŒ์ผ ์ž…๋ ฅ → ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜์–ด์žˆ๋–ค ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ”๋“œ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ → Read ์ฝ๊ธฐ ๋ชจ๋“œ

: ํŒŒ์ผ ์ถœ๋ ฅ → ์ฝ”๋“œ์˜ ๋‚ด์šฉ์„ ์ปดํ“จํ„ฐ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ(์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ) → Writer ์“ฐ๊ธฐ ๋ชจ๋“œ

 

#1-1. ํŒŒ์ผ ์ €์žฅ

: ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒฝ๋กœ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น package์•ˆ์— ์ €์žฅ

String path = ํŒŒ์ผ์œ„์น˜; // ํŒŒ์ผ์„ ์–ด๋””์— ์ €์žฅํ• ์ง€
String fileName = "ํŒŒ์ผ์ด๋ฆ„.txt"; // ํŒŒ์ผ ์ด๋ฆ„์„ ์–ด๋–ค๊ฑธ๋กœ ํ• ์ง€
String msg = "๋‚ด์šฉ"; // ํŒŒ์ผ์— ์ €์žฅํ•  ๋‚ด์šฉ, ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๊ณ ์‹ถ์„ ๊ฒฝ์šฐ \n์„ ์‚ฌ์šฉ

: ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ

FileWrite ๋ณ€์ˆ˜๋ช….close(); ํ•˜์—ฌ ์‚ฌ์šฉ์„ ์ข…๋ฃŒํ•˜์—ฌ์•ผ ๋‚ด์šฉ์ด ์ €์žฅ๋จ

 

#1-2. ํŒŒ์ผ ์ฝ๊ธฐ

: ์œ„ 1-1์˜ ํŒŒ์ผ ์ €์žฅ๊ณผ ๋‹ฌ๋ฆฌ, ํŒŒ์ผ์ด ์ €์žฅ๋œ ๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์ค˜์•ผ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Œ

: ํŒŒ์ผ ์ €์žฅ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฒ„ํผ ๊ณต๊ฐ„์„ Reader๋กœ ์—ด์–ด์ค˜์•ผ ํ•จ

// ํŒŒ์ผ ์ฝ๊ธฐ
String msg = Reader๋ช….readLine(); >> ํ•œ์ค„์”ฉ ์ฝ์–ด๋“ค์ด๊ธฐ

if(msg==null){ >> ๋งŒ์•ฝ ๋‹ค์Œ ๊ณต๊ฐ„์ด ๋นˆ ๊ณต๊ฐ„์ด๋ผ๋ฉด ์ข…๋ฃŒ
break;
}

#2. ํŒŒ์ผ ์ž…์ถœ๋ ฅ(๊ทธ๋ฆผ jpg.pdf ํŒŒ์ผ)

: ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ฌ, ๊ฒฝ๋กœ์™€ ํŒŒ์ผ๋ช…์€ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑ

String img = ๊ฒฝ๋กœ/ํŒŒ์ผ์ด๋ฆ„.jpg;

String destination = ๊ฒฝ๋กœ/ํŒŒ์ผ์ด๋ฆ„-๋ณต์‚ฌ๋ณธ.jpg;

 

FileInputStream์„ ์„ ์–ธํ•˜์—ฌ img์—์„œ ๋ฐœ๊ฒฌํ•œ ๊ฐ์ฒด๋ฅผ ์ฝ์–ด๋“ค์ž„

FileOutputStream์„ ์„ ์–ธํ•˜์—ฌ destination์— ์ž‘์„ฑํ•  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

 

๊ทธ๋ฆผ์€ ํ•œ์ค„ํ•œ์ค„ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— while๋ฌธ์„ ์‚ฌ์šฉ

์ฝ”๋“œ ๋‹จ์œ„๋กœ ์ฝ์–ด์˜ค๊ธฐ ๋–„๋ฌธ์— int๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , FileInputStream์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ์–ด์˜ด

 

EOF, ์ฆ‰ ํŒŒ์ผ์ด ๋๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด

if(int์˜ ๋ณ€์ˆ˜๋ช… = -1)์„ ์„ ์–ธํ•˜์—ฌ ํŒŒ์ผ์˜ ๋์„ ํ™•์ธ (-1๊ณผ EOF๋Š” ๊ฐ™์€ ๋œป)

 

FileOutputStream ๋˜ํ•œ ๋ณ€์ˆ˜๋ช….close();ํ•˜์—ฌ ์ข…๋ฃŒ

 

#3. ์Šค๋ ˆ๋“œ(Thread)

: ํ”„๋กœ์„ธ์Šค์—์„œ ์‹ค์ œ๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค == ์Šค๋ ˆ๋“œ

 

#3-1. ์Šค๋ ˆ๋“œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• 1

: ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” Thread ํด๋ž˜์Šค๋ฅผ "์ƒ์†" ๋ฐ›์•„์˜ค๊ธฐ

class TestThread extends Thread{
// ์˜ค๋ฒ„๋ผ์ด๋”ฉ
void run(){
}
}

#3-2. ์Šค๋ ˆ๋“œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• 2

: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ๋ƒฅ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ฒƒ์ด๊ธฐ ๋–„๋ฌธ์—, ์Šค๋ ˆ๋“œ๋Š” ์•„๋‹˜

class MyThread implements Runnable{
// ์˜ค๋ฒ„๋ผ์ด๋”ฉ
void run(){
}
}

: ์œ„ 1๋ฒˆ ๋ฐฉ๋ฒ•๊ณผ ๋น„๊ตํ•  ๋•Œ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ฝ”๋“œ๋ฅผ ์ ์œผ๋ฉด ๋ฐ”๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

#3-3. 1๋ฒˆ ๋ฐฉ๋ฒ• ์Šค๋ ˆ๋“œ ์‹คํ–‰

TestThread tt = new TestThread(); → ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜

tt.start(); → ๋”๋ธ” ํด๋ฆญ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ, ์‹ค์งˆ์ ์œผ๋กœ 1๋ฒˆ ๋ฐฉ๋ฒ•์— ์ž‘์„ฑํ•œ run๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ์Œ

 

#3-4. 2๋ฒˆ ๋ฐฉ๋ฒ• ์Šค๋ ˆ๋“œ ์‹คํ–‰

: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋  ์ˆ˜ ์—†์Œ

: ์ง„์งœ ์Šค๋ ˆ๋“œ์— ๋‚ด๊ฐ€ ๋งŒ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๋„ฃ์–ด์„œ ์ƒ์„ฑ์„ ํ•ด์ค˜์•ผ ํ•จ

MyThread mt = new MyThread(); → ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•œ ์Šค๋ ˆ๋“œ ์„ ์–ธ

Thread t = new Thread(mt); → ์ง„์งœ ์Šค๋ ˆ๋“œ์— ์œ„ ์ƒ์„ฑํ•œ MyThread๋ฅผ ๋Œ€์ž…ํ•ด์•ผ ํ•จ(์ธ์ž ์—ญํ• )

t.start();