์•ˆ๋…•ํ•˜์„ธ์š”, ์ผ€์ด์น˜์ž…๋‹ˆ๋‹ค.


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž๋ฐ”๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅํ•ด๋ณด๋Š” ์†Œ์Šค๋ฅผ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


์šฐ์„  CLI ํ™˜๊ฒฝ์ด๋“  ๋‹ค๋ฅธ IDE ํˆด ํ™˜๊ฒฝ์ด๋“  Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ฉ”์ธ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ฃ .


๊ทธ๋ž˜์„œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด public void main(String[] args) {} ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ์“ฐ์ฃ .


์ด๋•Œ  main๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ๋ฐ›๋Š” ์ € String[] args ๊ฐ€ ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•œ ํ†ต๋กœ์ž…๋‹ˆ๋‹ค.


์ปค๋งจ๋“œ ๋ผ์ธ ๋ช…๋ น์œผ๋กœ java myapp a.txt  ๋ผ๊ณ  ์ž…๋ ฅ์„ ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ์ € args์— a.txt๋ผ๋Š” ์ŠคํŠธ๋ง ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ฆ‰, ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅ๋ฐ›๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .


ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅ๋ฐ›์•˜์œผ๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ทธ ํŒŒ์ผ์„ ์—ด์–ด์„œ ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๊ณ  ๋ฌด์ž‘์ • ํŒŒ์ผ์„ ์—ด ์ˆ˜๋Š” ์—†์„ ๊ฒ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด?? ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋„ ํ•ด์ค˜์•ผ ๊ฒ ์ฃ ?


์ž, ๊ทธ๋Ÿผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด ๋ณผ๊นŒ์š”?


์šฐ์„  ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์ธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.


public class ReadFileAndPrint {     public static void main(String[] args) {     } }


ReadFileAndPrint๋ผ๋Š” ์ด๋ฆ„์˜ ์ž๋ฐ”ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์„œ ๋ฉ”์ธํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


์ž, ๊ทธ๋Ÿผ ์ด์ œ ๋ญ˜ ํ•ด์•ผ ํ•  ๊นŒ์š”? ์ € ์œ„์—์„œ ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ํŒŒ์ผ๋ช…์„ ์ž…๋ ฅ๋ฐ›์•„์„œ args๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์ž๋ฐ”์—์„œ ์•Œ์•„์„œ ์ž๋™์œผ๋กœ ํ•ด์ค„ํ…Œ๋‹ˆ


์šฐ๋ฆฌ๋Š” ๊ทธ ์ „๋‹ฌ๋ฐ›์€ ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง€๊ณ  ์ง€์ง€๊ณ  ๋ณถ๊ณ  ํ•˜๋ฉด ๋˜๊ฒ ์ฃ ?


์ผ๋‹จ ์ž…๋ ฅ ๋ฐ›์€ ํŒŒ์ผ๋ช…์ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.



public static void main(String[] args) {
		
	// 1. ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
	if ( args.length == 0 ){
		System.out.println("์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.");
		System.exit(0);
	}
}


์œ„ ์ฝ”๋“œ๋Š” args๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ŠคํŠธ๋ง ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์ด ์—†์œผ๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋„๋ก ํ•ด๋†“์•˜์Šต๋‹ˆ๋‹ค.


์ž, ๊ทธ๋Ÿผ ์‹ค์ œ๋กœ ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์ด ์žˆ์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•  ๊นŒ์š”?


๊ทธ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์œผ๋กœ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์—ฌ์•ผ ๊ฒ ์ฃ ?


์ด์ œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.



// 2. ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ
File file = new File(args[0]);

if ( file.exists() ){

}


์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ํ•œ๊ฐœ๋ผ๋Š” ๊ฐ€์ • ํ•˜์— args๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ’๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


ํŒŒ์ผ์„ ์ž๋ฐ”์†Œ์Šค๋กœ ์ฝ์–ด๋“ค์ผ ๋•Œ๋Š” File ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. File ์ƒ์„ฑ์ž์— ํŒŒ์ผ๋ช…์„ ๋‹ด๊ณ ์žˆ๋Š” args[0] ์„ ์ „๋‹ฌํ•˜์—ฌ new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฆ„์˜ ํŒŒ์ผ์„ File ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  if ๋ฌธ์„ ํ†ตํ•ด์„œ ํ•ด๋‹น ํŒŒ์ผ๋ช…์„ ๊ฐ–๋Š” ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์‹œ์Šคํ…œ ์ƒ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค.


if ๋ฌธ ์•ˆ์—์„œ๋Š” ํ•ด๋‹น ํŒŒ์ผ๋ช…์„ ๊ฐ–๋Š” ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์กด์žฌํ–ˆ์„ ๋•Œ ํ•ด์•ผํ•  ์ผ์„ ์ฝ”๋“œ๋กœ ์ ์–ด์ฃผ๋ฉด ๋˜๊ฒ ์ฃ .


์šฐ๋ฆฌ๋Š” File  ๊ฐ์ฒด๋ฅผ BufferedReader ๋ฅผ ์ด์šฉํ•ด์„œ ์ข€๋” ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ๊ฒ๋‹ˆ๋‹ค.


์ด์ œ if ๋ฌธ ์•ˆ์— ๋‹ค์Œ ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณผ๊นŒ์š”?



// 3. ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅ BufferedReader br = new BufferedReader(new FileReader(file)); while( br.ready() ){ System.out.println(br.readLine()); } br.close();


์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด File ๊ฐ์ฒด์ธ file์„ FileReader๋กœ ๊ฐ์‹ผ ๋‹ค์Œ ๋‹ค์‹œ BufferedReader๋กœ ๊ฐ์ŒŒ์Šต๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ํ•˜๋ฉด BufferedReader ์˜ readLine() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์†์‰ฝ๊ฒŒ ๋ผ์ธ ๋‹จ์œ„๋กœ ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‚ด์šฉ์ด ์กด์žฌํ•˜๋Š”์ง€๋Š” br.reader() ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ  true๊ฐ€ ๋ฐ˜ํ™˜๋  ๊ฒฝ์šฐ์— ๊ณ„์†ํ•ด์„œ ํ•œ์ค„์”ฉ ์ฝ์–ด๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์ถœ๋ ฅํ•˜๋„๋ก ๋กœ์ง์ด ๊ตฌ์„ฑ๋˜์–ด์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž, ๊ทธ๋Ÿผ ์ „์ฒด ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ณด๋„๋ก ํ•˜์ฃ .



public class ReadFileAndPrint {     public static void main(String[] args) throws IOException {

// 1. ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ if ( args.length == 0 ){ System.out.println("์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค."); System.exit(0); } // 2. ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ File file = new File(args[0]); if ( file.exists() ){     // 3. ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด, ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ ์ถœ๋ ฅ     BufferedReader br = new BufferedReader(new FileReader(file));     while( br.ready() ){ System.out.println(br.readLine());     }     br.close(); }

}



์ด์ œ ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ ์ธ์ž๋กœ ์›ํ•˜๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ช…์„ ๋„ฃ์–ด์ฃผ์„ธ์š”. 


์ƒ๋Œ€๊ฒฝ๋กœ๋ช…์„ ๋„ฃ์„ ๊ฒฝ์šฐ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ํŒŒ์ผ์„ ๋ชป ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ž˜ ์ถœ๋ ฅ๋œ๋‹ค๋ฉด ์ž˜ ๋”ฐ๋ผ์˜ค์‹ ๊ฒ๋‹ˆ๋‹ค.


์–ด๋•Œ์š” ? ๋ณ„๋กœ ์–ด๋ ต์ง€ ์•Š์ฃ ??


์ด์ƒ์œผ๋กœ ์ž๋ฐ”๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ ์ฝ์–ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๊ถ๊ธˆํ•˜์‹  ์  ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋‹ฌ์•„์ฃผ์„ธ์š” ^-^