Study/Java

[TIL] ํŒŒ์ผ ์ž…์ถœ๋ ฅ

hong- 2022. 5. 21. 16:47

๐Ÿ‘๐Ÿป ํŒŒ์ผ ์ž…์ถœ๋ ฅ

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

  - ์ŠคํŠธ๋ฆผ์€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ → ๋•Œ๋ฌธ์— ์ž…์ถœ๋ ฅ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ ์ŠคํŠธ๋ฆผ ํ•„์š”

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

 โ–ช๏ธ FileInputStream : ํŒŒ์ผ ๋‚ด์šฉ ์ฝ๊ธฐ

  - ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋‚ด์šฉ์„ ๋ฐ”์ดํŠธ๋กœ ์ž…๋ ฅ๋ฐ›์•„ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค

  - InputStream์„ ์ƒ์†๋ฐ›์Œ

  - ์ถœ๋ฐœ ์ง€์ ๊ณผ ๋„์ฐฉ ์ง€์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ต๋กœ(์ŠคํŠธ๋ฆผ) ์ƒ์„ฑ

  - ์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋А๋ฆผ → ๋ฒ„ํผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ๋งŽ์ด ์‚ฌ์šฉ

  - ๋ฒ„ํผ ? ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ์—ฌ๋Ÿฌ ๋ฐ”์ดํŠธ๋ฅผ ์ €์žฅํ•˜์—ฌ ํ•œ๋ฒˆ์— ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ž„์‹œ ์ €์žฅ๊ณต๊ฐ„

  - BufferedInputStream์ด๋ผ๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ

 

 1๏ธโƒฃ try-catch ๊ตฌ๋ฌธ ์‚ฌ์šฉ

try { ~~ }
catch { ~~ }
catch(Exception e) {
	System.out.print(e);
 }

  - ํŒŒ์ผ๋ช…์„ String์œผ๋กœ ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด Exception ์ฒ˜๋ฆฌ ํ•„์š”

 2๏ธโƒฃ ์ƒ์„ฑ์ž File

FileInputStream fileInput = new FileInputStream("welcome.txt");

  or

File f = new File("welcome.txt");
FileInputStream fileInput = new FileInputStream(f);

  - ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ํŒŒ์ผ๋ช…์„ ์ง์ ‘ String ํ˜•ํƒœ๋กœ ์ฃผ๊ฑฐ๋‚˜ or File ๊ฐ์ฒด๋กœ ์ค„ ์ˆ˜ ์žˆ์Œ

  - ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ†ต๋กœ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ

 

 3๏ธโƒฃ ํŒŒ์ผ์—์„œ ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ

int i = 0;

 - ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•จ

 - ํ•œ๊ธ€์ž์”ฉ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ํ•˜๋Š” ์„ ์–ธ

4๏ธโƒฃ int read()์™€ while ๋ฌธ

int read() : 1byte์”ฉ ๋‚ด์šฉ์„ ์ฝ์–ด ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜
int read(byte[] b) : ํŒŒ์ผ ๋‚ด์šฉ์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ฝ์–ด์„œ ๋ฐฐ์—ด์— ์ €์žฅ

 - ๋ชจ๋‘ ํ˜„์žฌ ํŒŒ์ผ ํฌ์ธํ„ฐ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•จ

while( (i=fileInput.read() != -1 ) {
	System.out.print((char) i);
  }

  - ์ฝ์–ด์˜ฌ ๊ฐ’์ด ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ while ๋ฌธ์„ ๋‚˜๊ฐ

  - 1byteํฌ๊ธฐ์˜ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•จ : (char)ํ˜•๋ณ€ํ™˜

 5๏ธโƒฃ ํ˜„์žฌ ์—ด๋ฆฐ ํŒŒ์ผ ๋‹ซ๊ธฐ 

fileInput.close();

  - try-catch๋ฌธ ์‚ฌ์šฉํ•  ๋•Œ ํŒŒ์ผ์„ ๋‹ซ์•„์ฃผ์–ด์•ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ


โ–ช๏ธ FileInputStream : ํŒŒ์ผ ๋‚ด์šฉ ์ž‘์„ฑ

  - ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(ํ†ต๋กœ) ์ƒ์„ฑ

  - ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 1๏ธโƒฃ ํŒŒ์ผ ์ƒ์„ฑ

FileOutputStream fileoutput = new FileOutputStream("happyday.txt");
fileoutput.write(๋‚ด์šฉ);

  or
  
File f = new File("happyday.txt");
FileOutputStream fileoutput = new FileOutputStream(f);
fileoutput.write(๋‚ด์šฉ);

 2๏ธโƒฃ ํŒŒ์ผ ๋‚ด์šฉ ๊ธฐ๋ก void write()

void write(int b) : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ •์ˆ˜๋ฅผ ๋ฌธ์ž๋กœ ์ถœ๋ ฅ
void(byte[] b) : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์˜ ๋‚ด์šฉ์„ ๋ฌธ์ž๋กœ ์ถœ๋ ฅ
byte b[] = word.getBytes();
fileoutput.write(b);

  - word์˜ ๋‚ด์šฉ์„ ๋ฐ”์ดํŠธ๋กœ ๊ฐ€์ ธ์™€ ๋ฐฐ์—ด๋กœ ์ €์žฅ

  - fileoutput์— ๋ฐฐ์—ด b ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋ฌธ์ž๋กœ ์ €์žฅ


๐Ÿ“ FileReader, FileWriter  : ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

 

  - ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ

  - ์ธ์ฝ”๋”ฉ๊ณผ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ„์˜ ๋ณ€ํ™˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ

  - FileReader์€? ์ธ์ฝ”๋”ฉ   โžก๏ธ  ์œ ๋‹ˆ์ฝ”๋“œ

  - FileWriter์€? ์œ ๋‹ˆ์ฝ”๋“œ   โžก๏ธ  ์ธ์ฝ”๋”ฉ

โ–ช๏ธ FileReader  : ํŒŒ์ผ ์ฝ๊ธฐ

  - ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ฝ์–ด์˜ฌ ๋•Œ ์‚ฌ์šฉ

  - ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ ํŒŒ์ผ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

  - ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋“ค์„ ์ด์šฉํ•ด ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ๊ณ  ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅ์ผ€ ํ•จ

โ–ช๏ธ FileWriter : ํŒŒ์ผ ์“ฐ๊ธฐ 

  - ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ

  - ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋งŒ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ ํŒŒ์ผ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ


๐Ÿ’ก exception

  - ๋กœ์ง์ด ์‹คํ–‰๋˜๋Š” ์ค‘์— ์›ํ•˜์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ƒํ•˜์ง€ ์•Š๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ์ฒ˜๋ฆฌ

  - ์ข…๋ฅ˜๋กœ๋Š” checked-exception(ex. IOException)๊ณผ unchecked-exception( ex.NullpointException) 

๐Ÿ’ก printStackTrace()

  - Exception์ด ๋ฐœ์ƒํ•œ ์ด์œ ์™€ ์œ„์น˜๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ „์ฒด์ ์ธ ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅ


๐Ÿ“ File ํด๋ž˜์Šค

  - Fileํด๋ž˜์Šค๋กœ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

  - File ์ธ์Šคํ„ด์Šค๋Š” ํŒŒ์ผ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋””๋ ‰ํ† ๋ฆฌ ์ผ ์ˆ˜๋„ ์žˆ์Œ

(1) getPath() : File ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋„ฃ์–ด์ค€ ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
(2) getCanonicalPath() : ํŒŒ์ผ์˜ ์ •๊ทœ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜
(3) getParent() :ํŒŒ์ผ์˜ ์กฐ์ƒ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜
(4) getName : ํŒŒ์ผ๋ช… ๋ฐ˜ํ™˜
(5) canWrite() : ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
(6) canExecute() : ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
(7) canRead() : ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
(8) createNEwFile() : ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ
(9) delet : ํŒŒ์ผ ์‚ญ์ œ

https://docs.oracle.com/javase/7/docs/api/java/io/File.html ์ฐธ๊ณ ํ•˜์„ธ์—ฌ !! ๋„˜ ๋งŽ์Œ !!

 โ–ช๏ธ ํŒŒ์ผ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ํŒŒ์ผ ์ƒ์„ฑ

File file = new File("./dev"(๊ฒฝ๋กœ), "javastudy.txt"(ํŒŒ์ผ๋ช…));
file.createNewFile();

  - ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‹คํ–‰๋˜๋Š” ์œ„์น˜๊ฐ€ ๊ฒฝ๋กœ๋กœ ๊ฐ„์ฃผ๋จ