Bibi's DevLog ๐ค๐
[Java] ํ์ผ ์ ์ถ๋ ฅ(.txt) - ํ์ผ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ๋ฒ๊ณผ ์์ธ์ฒ๋ฆฌ(throws์ try-catch) ๋ณธ๋ฌธ
[Java] ํ์ผ ์ ์ถ๋ ฅ(.txt) - ํ์ผ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ๋ฒ๊ณผ ์์ธ์ฒ๋ฆฌ(throws์ try-catch)
๋น๋น bibi 2020. 11. 11. 18:10์๋ฐ์์ ์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํ๊ณ ์ถ์ ๋,
๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด ์ค๊ณ ์ถ์ ๋๊ฐ ์๋ค.
(๋๋ ๊ฐ๊ณ๋ถ ๋ฏธ์
์ ํ๋ฉด์ ์ด ์ ์ฐจ๊ฐ ํ์ํด์ก๋ค)
์ค์ ์๋น์ค์์๋ MySQL, ์ค๋ผํด์ด๋ MongoDB๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๊ฒ ์ง๋ง,
๋์ฒ๋ผ ์์ ์์ ๋ฅผ ํ๊ฑฐ๋ ์์ ํ๋ก์ ํธ๋ฅผ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ์ธ ํ์๊ฐ ์์ ๋๋ ์๋ค.
"์๋ฐ ํ์ผ ์ ์ถ๋ ฅ", "์๋ฐ ํ์ผ์ ์ฅ" ๋ฑ์ผ๋ก ๊ตฌ๊ธ๋งํ๋ txtํ์ผ๋ก ๋ฐ์ดํฐ ์ ๋ ฅ, ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค๊ณ ํด์ ๊ทธ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด ๋ณด์๋ค.
์ฒ์์๋ ์๋ '์ ํ ํฌ ํ์ด์ฌ'์ ํ์ผ์ ์ถ๋ ฅ ์์ ๋ฅผ ๋ณด๋ฉฐ ์คํ ๋ฐ์ด ์คํ ์ผ๋ก ๋ฐ๋ผํด ๋ณด์๋ค.
wikidocs.net/227๊ฐ์ฌํฉ๋๋ค.
๋๋ ์ ๋งํฌ์์ ์ ์ํ ๋ฐฉ๋ฒ๋ค ์ค์์๋
๊ฐ์ฅ ๊ฐ๋จํ๋ฉด์ ์ ์ฉํด ๋ณด์ด๋ ์์ ๋ฅผ ๊ณจ๋ผ์ ์๋์ ๊ฐ์ด ๋ณํํด ๋ณด์๋ค.
์๋ฐ txtํ์ผ์ ๋ฐ์ดํฐ ์ ๋ ฅ
// 'txt ํ์ผ ์
๋ ฅ(๋ฐ์ดํฐ ๋ฃ๊ธฐ)' ํ
์คํธ์ฉ ํ์ผ์
๋๋ค.
import java.io.FileWriter;
import java.io.IOException;
public class FileWrite {
public static void main(String[] args) throws IOException{
// ํ์ผ์ ์์ฑํ๊ธฐ ์ํด FileWriter ํด๋์ค ์ฌ์ฉํด fw ๊ฐ์ฒด๋ฅผ ์์ฑ.
FileWriter fw = new FileWriter("c:/out.txt");
// ํ์ผ์ ๋ฃ๊ณ ์ถ์ ๋ด์ฉ ์์ฑ : .write(๋ด์ฉ);
for(int i=1; i<11; i++) {
String data = i+" ๋ฒ์งธ ๊ณ ์์ด!๐ฑ"+"\r\n";// \r\n์ ์ค๋ฐ๊ฟ ๋ฌธ์์ด๋ค.
fw.write(data);
}
fw.close();// ๊ผญ ์ฌ์ฉ ํ ๋ซ์์ฃผ๊ธฐ.
// ๊ธฐ์กด ํ์ผ์ ์๋ก์ด ๋ด์ฉ ์ถ๊ฐํ๊ธฐ : ํ์ผ๋ช
๋ค์ ์ถ๊ฐ๋ชจ๋(append)๋ฅผ true๋ก ํ๋ค.
FileWriter fw2 = new FileWriter("c:/out.txt", true);
for(int i=11; i<21; i++) {
String data = "(์ถ๊ฐ)"+i+" ๋ฒ์งธ ๊ณ ์์ด!๐ฑ\r\n";
fw2.write(data);
}
fw2.close();
}
}
(์ ์ฝ๋์์)fw์ fw2์ ์ฐจ์ด??
ํ์ผ๊ฒฝ๋ก ๋ค์ true๊ฐ ์๋ ์๋์ ์ฐจ์ด์ด๋ค.
true๊ฐ์ appendํญ๋ชฉ์ ์ง์ ํด ์ค ๊ฒ์ธ๋ฐ,
fw2 ์ฒ๋ผ append๊ฐ์ด true์ด๋ฉด ๊ธฐ์กด ๊ฐ์ ์ด์ด์ ๋ด์ฉ์ ์์ฑํด ๋ฃ๋ ๊ฒ์ด๊ณ
fw์ฒ๋ผ true๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ์กด ๊ฐ์ ๋ชจ๋ ์ง์ฐ๊ณ ์๋ก ๋ด์ฉ์ ์์ฑํด ๋ฃ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋๋ true ์์ด ๋ฃ๊ณ ,
๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ก์ด ๋ด์ฉ์ ์ถ๊ฐํ ๋๋ true๊ฐ์ ์ง์ ํ๊ณ ๋ฃ์ผ๋ฉด ๋๊ฒ ๋ค.
์๋ฐ txtํ์ผ์ ๋ฐ์ดํฐ ์ถ๋ ฅ
// 'txt ํ์ผ ์ถ๋ ฅ(๋ฐ์ดํฐ ์ฝ์ด์ค๊ธฐ)' ํ
์คํธ์ฉ ํ์ผ์
๋๋ค.
import java.io.BufferedReader;
import java.io.FileReader;
// BufferedReader์ FileReader๋ฅผ ์กฐํฉํด ์ฌ์ฉํ๋ฉด txtํ์ผ์ ํ ์ค์ฉ ์ฝ์ ์ ์๋ค.
import java.io.IOException;
public class FileRead {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("c:/out.txt"));
while (true) { // .txt ํ์ผ์ ๋ผ์ธ ๋จ์๋ก ์ฝ์ด์์, ๋ผ์ธ ๋จ์๋ก ์ถ๋ ฅ.
String line = bufferedReader.readLine(); // .readline()๋ฉ์๋ : ๋ ์ด์ ์ฝ์ ๋ผ์ธ์ด ์์ผ๋ฉด null์ ๋ฆฌํดํจ.
if (line == null) break; // ๋ ์ด์ ์ฝ์ ๋ผ์ธ์ด ์์ผ๋ฉด while๋ฌธ์ ๋น ์ ธ๋๊ฐ.
System.out.println(line);
}
bufferedReader.close();
}
}
์ฐธ๊ณ ) ํ
์คํธ ํ์ผ์ ๋งจ ์ฒซ ์ค๋ง ์ฝ์ ๋๋
while๋ฌธ ์์ด String line = bufferedReader.readLine(); ๋ง ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ฐ txtํ์ผ ์ฝ์ด์ฌ ๋ ์์ธ์ฒ๋ฆฌ - throws ์ try-catch์ ์ฐจ์ด
yeolco.tistory.com/106 ์์ ๋์์ ๋ฐ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
txtํ์ผ์ ์ฝ์ด์ฌ ๋๋ ๋ค์ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๋ฐ๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค๊ณ ํ๋ค.
throw์ try-catch ๋ ๋ค ์์ธ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ ์ ์๋ค.
์ธํฐ๋ท์์ ์ฐพ์๋ณธ ๋๋ถ๋ถ์ ์์ ๋ throws IOExpection ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํด ๋์๋ค. (์์ ์์ ๋ ๋ง์ฐฌ๊ฐ์ง)
(throws ์์ธ์ฒ๋ฆฌํ๋ ๋ฐฉ์ : ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ ์๊ดํธ์ ์ค๊ดํธ ์ฌ์ด.
์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ ์๊ดํธ์ ์ค๊ดํธ ์ฌ์ด์ throws IOExpection์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.)
๋๋ ํ
์คํธ ์์ ๋ฅผ ๋ง๋ค ๋๋ throws๋ก ์ฒ๋ฆฌํ์ ๋ ๋ฌธ์ ์์ด ๋์ํ์๋๋ฐ,
๊ฐ๊ณ๋ถ ์์ ๋ฅผ ๋ง๋ค๋ฉฐ throws๋ฅผ ์ฐ๋ ์ฐ๊ด๋ ๋ฉ์๋๋ค์ด ์ฃ๋ค ์ค๋ฅ๊ฐ ๋ฌ๋ค.
์ฆ ๋์ฒ๋ผ ๊ธฐ์กด ์ฝ๋์ ํ ๋ถ๋ถ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ,
throw๋ฅผ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ณ์ ๋ค์ ๋ฉ์๋๋ก ์์ธ์ฒ๋ฆฌ๊ฐ ๋์ด๊ฐ๊ฒ ๋์ด ๊ณ์ ์๋ฌ๊ฐ ์๊ฒผ๋ค;;
์ด์ํด์ ๊ตฌ๊ธ๋งํด ๋ณด๋ throws๋ "๋ค์์ ์ฒ๋ฆฌ๋๋ ๋ก์ง์ด ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ฒ ํ๋" ๊ตฌ๋ฌธ์ด์๋ค. ;;
(ํ๋ง๋๋ก ๋ ๋๊ธฐ๊ธฐ๋ค)
๊ฒฐ๋ก )
ํ
์คํธ ์์ ์ฒ๋ผ ๋จ๋
๋ก์ง์ผ๋ก ๊ธฐ๋ฅํ๋ ํ๋ก๊ทธ๋จ์ throws๋ฅผ ์ฌ์ฉํด๋ ์๊ด์์ง๋ง,
์ฌ๋ฌ ๋ฉ์๋์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ณต์กํ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ
ํ์ผ์ ์ฝ๋/์ฐ๋ ๋ฉ์๋์ ์ฐ๊ด๋ ๋ชจ๋ ๋ฉ์๋์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๊ฒ ๋๋ค.
(ํ๋ง๋๋ก ๋ฌดํ throws..)
๋ฐ๋ผ์ ์ด๋ด ๋๋ throws๋ณด๋ค๋ try-catch๋ฌธ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ๋ ๊ฒ ์ข๋ค๊ณ ํ๋ค.
๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ํตํด
try {
//reader ๋๋ writer ์ฝ๋๋ค
} catch (IOException e) {
e.printStackTrace();
}
์ด๋ฐ ๊ตฌ๋ฌธ์ ์์๋ด์ด ์ ์ฉํ๋, throws๋ณด๋ค ๊น๋ํ๊ฒ ์์ธ์ฒ๋ฆฌ๊ฐ ๋์๋ค.
๋ ๊ณต๋ถํ ๊ฒ
โ ์์ธ์ฒ๋ฆฌ
: wikidocs.net/229 ๋ฅผ ํตํด ๋ ๊ณต๋ถํ์.
โcatch์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ๋ ์ฐ๋..
-e๋ ๋ฌด์์ธ๊ฐ?
-e.printStackTrace();๋ ๋ฌด์จ ๊ตฌ๋ฌธ์ธ๊ฐ?
โ try-catch๋ฌธ์ ๋ํ ๊ฐ๋ ๊ณต๋ถํ๊ธฐ.