๐ ์คํธ๋ฆผ ์ ์ถ๋ ฅ
- ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ๋ ์ํํธ์จ์ด ๋ชจ๋
- ์คํธ๋ฆผ์ ์๋์๋ ์ ์ถ๋ ฅ ์ฅ์น์ ์๋ฐ ์์ฉํ๋ก๊ทธ๋จ์ด ์ฐ๊ฒฐ๋๋ค.
- ์คํธ๋ฆผ์ ๋จ๋ฐฉํฅ์ด๋ค.
- ์คํธ๋ฆผ์ ํตํด ํ๋ฌ๊ฐ๋ ๊ธฐ๋ณธ ๋จ์๋ ๋ฐ์ดํธ๋ ๋ฌธ์์ด๋ค.
- ์คํธ๋ฆผ์ ์ ์ ์ ์ถ์ด๋ค.
๐ ๋ฐ์ดํธ ์คํธ๋ฆผ๊ณผ ๋ฌธ์ ์คํธ๋ฆผ
- ๋ฌธ์ ์คํธ๋ฆผ (character stream)
- ๋ฌธ์๋ง ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ๋ฌธ์๊ฐ ์๋ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋๋ฉด ๋ณด์ด์ง ์๊ฑฐ๋ ์๋ฑํ ๊ธฐํธ๊ฐ ์ถ๋ ฅ๋๋ค
- ๋ฌธ์๊ฐ ์๋ ์ ๋ณด๊ฐ ์ ๋ ฅ๋๋ฉด ์์ฉํ๋ก๊ทธ๋จ์๊ฒ ์๋ฑํ ๋ฌธ์๊ฐ ์ ๋ฌ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
- ์๋ฐ์์ char ํ์ ์ ๋ฌธ์ ํ๋ ํฌ๊ธฐ๋ 2๋ฐ์ดํธ์ด๋ค.
- ๋ฐ์ดํธ ์คํธ๋ฆผ (byte stream)
- ๋ฐ์ดํธ๋ฅผ ๋จ์๋ก ๋ค๋ฃจ๋ ์คํธ๋ฆผ
- ๋ฌธ์์ด๋ ์ด๋ฏธ์ง ๋ฐ์ดํธ๋ ์๊ด์์ด ํ๋ ค๋ณด๋ธ๋ค.
ํ ์คํธ ํ์ผ์ด๋ ์๋ฐ ์์ค ํ์ผ๊ฐ์ด ๋ฌธ์๋ค๋ก๋ง ์ด๋ฃจ์ด์ง ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ์ฐ, ๋ฌธ์ ์คํธ๋ฆผ ํด๋์ค (FileReader, FileWriter)๋ ๋ฐ์ดํธ ์คํธ๋ฆผ ํด๋์ค (FileInputStream, FileOutputStream) ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ์ด๋ฏธ์ง๋ ์ค๋์ค/๋น๋์ค ํ์ผ์ ๋ฐ์ดํฐ๋ ๋ฌธ์๊ฐ ์๋ ๋ฐ์ด๋๋ฆฌ ์ ๋ณด๋ค์ด๋ฏ๋ก, ์ด๋ค์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ๋ฐ์ดํธ ์คํธ๋ฆผ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๐ ์คํธ๋ฆผ ์ฐ๊ฒฐ
InputStreamReader rd = new InputStreamReader(System.in);
int c = rd.read(); //์
๋ ฅ ์คํธ๋ฆผ์ผ๋ก๋ถํฐ ํค ์
๋ ฅ. c๋ ์
๋ ฅ๋ ํค์ ๋ฌธ์ ๊ฐ
- ๋ฌธ์ ์คํธ๋ฆผ rd๋ฅผ ์์ฑํ๊ณ , ํค๋ณด๋์ ์ฐ๊ฒฐ๋ ํ์ค ์ ๋ ฅ ์คํธ๋ฆผ์ธ System.in ์ ์ฐ๊ฒฐํ๋ค.
- System.in์ InputStream ํ์ ์ผ๋ก ๋ฐ์ดํธ ์ ๋ ฅ ์คํธ๋ฆผ์ด๋ค.
- ๋ ์คํธ๋ฆผ์ด ์ฐ๊ฒฐ๋๋ฉด System.in์ ์ฌ์ฉ์์ ํค ์ ๋ ฅ์ ๋ฐ์ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ด๋ณด๋ด๋ฉฐ, rd๋ ๋ค์ด์ค๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ฌธ์๋ก ๊ตฌ์ฑํ์ฌ ์์ฉํ๋ก๊ทธ๋จ์๊ฒ ์ ๋ฌํ๋ค.
๐ ๋ฌธ์ ์คํธ๋ฆผ
- 2๋ฐ์ดํธ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋จ์๋ก ์ ์ถ๋ ฅํ๋ ์คํธ๋ฆผ
- ํ์ผ ์
๋ ฅ ์คํธ๋ฆผ ์์ฑ
FileReader fin = new FileReader("c:\\test.txt");
- ํ์ผ ์ ๋ ฅ ์คํธ๋ฆผ ์์ฑ ํ c:\\test.txtํ์ผ์ ์ฐ๊ฒฐํ๋ ์ฝ๋
- FileReader์ ์์ฑ์๋ c:\\test.txt ํ์ผ์ ์ฐพ์ ์ด๊ณ , ํ์ผ๊ณผ ์คํธ๋ฆผ์ ์ฐ๊ฒฐํ๋ค.
- c:\\test.txt ํ์ผ์ ๋ฌธ์๋ค๋ก๋ง ๊ตฌ์ฑ๋ ํ ์คํธ ํ์ผ์ด๋ค.
- ํ์ผ ์ฝ๊ธฐ
-
int c; while((c = fin.read())!=-1) { System.out.print((char)c); }โ
- fin.read()๋ ์ฐ๊ฒฐ๋ ํ์ผ๋ก๋ถ๋ ๋ฌธ์ ํ๋๋ฅผ ์ฝ์ด ๋ฆฌํดํ๋ฉฐ, ํ์ผ์ ๋์ ๋ง๋๋ฉด -1์ ๋ฆฌํดํ๋ค.
char[] buf = new char [1024]; //1024๋ 1KB์ด๋ค. int n = fin.read(buf); //ํ ๋ฒ์ 1024๊ฐ ๋ฌธ์๋ฅผ ์ฝ์ด buf์ ์ ์ฅํ๊ณ ์ค์ ์ฝ์ ๋ฌธ์ ์ ๋ฆฌํด
- ํ์ผ์ด ๋๋ฌด ํฐ ๊ฒฝ์ฐ ํ ๋ฒ์ ํ ๋ธ๋ก(๋ฒํผ ํฌ๊ธฐ)๋งํผ ์ฝ๋ read()๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
-
- ์คํธ๋ฆผ ๋ซ๊ธฐ
fin.close();
๐ ํ์ผ ์ ์ถ๋ ฅ๊ณผ ์์ธ ์ฒ๋ฆฌ
- ํ์ผ ๊ฒฝ๋ก๋ช ์ด ํ๋ฆฐ ๊ฒฝ์ฐ FileNotFoundException ์์ธ ๋ฐ์
- ํ์ผ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ๋ซ๊ธฐ๋ฅผ ํ๋ ๋์ ์ ์ถ๋ ฅ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด read(), write(), close() ๋ฉ์๋๊ฐ IOException ์์ธ ๋ฐ์
- ๋ฐ๋ผ์ ํ์ผ ์
์ถ๋ ฅ ์ฝ๋์๋ try-catch ์ฝ๋๊ฐ ํ์
try { FileReader fin = new FileReader("c:\\test.txt"); ... int n = fin.read(); ... fin.close(); } catch(FileNotFoundException e) { System.out.println("ํ์ผ์ ์ด ์ ์์"); } catch(IOException e) { System.out.println("์ ์ถ๋ ฅ ์ค๋ฅ"); }
-
//FilerReader๋ก ํ ์คํธ ํ์ผ ์ฝ๊ธฐ import java.io.*; public class FileReaderEx { public static void main(String[] args) { // TODO Auto-generated method stub FileReader fin = null; try { fin = new FileReader("D:\\์๋ฐ ๊ณต๋ถ\\system.ini"); //ํ์ผ ๊ฒฝ๋ก int c; while ((c = fin.read()) != -1) { System.out.print((char)c); } fin.close(); } catch (IOException e) { System.out.println("์ ์ถ๋ ฅ ์ค๋ฅ"); } } }โ
- read()๋ ํ ๋ฐ์ดํธ๋ ํ ๋ฌธ์๋ฅผ ๋ฆฌํดํ๋๋ฐ ๋ฆฌํด ํ์
์ด int์ธ ์ด์
- read()๊ฐ 0xFF๋ฅผ ๋ฆฌํดํ ๋ ํ์ผ์ ๋์ ๋ํ๋ด๋ -1๊ณผ ํท๊ฐ๋ฆฌ์ง ์๊ฒ 32๋นํธ๋ก ๋ฆฌํดํ๊ธฐ ์ํจ
๐ ํ์ผ ์ถ๋ ฅ ์คํธ๋ฆผ ์์ฑ
FileWriter fout = new FileWriter("c:\\Temp\\text.txt");
- FileWriter ์ ์์ฑ์๋ c:\\Temp\\text.txtํ์ผ์ ์ด์ด ์คํธ๋ฆผ๊ณผ ์ฐ๊ฒฐ.
- ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ๋น ํ์ผ์ ์์ฑ
- ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ๋ด์ฉ์ ์ง์ฐ๊ณ ์ฒ์๋ถํฐ ์ธ ์ค๋น
๐ ํ์ผ ์ฐ๊ธฐ
- write()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๋จ์๋ก ํ์ผ์ ์ ์ฅํ ์ ์๋ค.
-
fout.write('A'); //์คํธ๋ฆผ fout์ 'A'๋ฅผ ์ ์ฅํ๋ ์ฝ๋
- write()๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ํ ๋ฒ์ ํ ๋ธ๋ก์ฉ ์ธ ์ ์๋ค.
-
char[]buf = new char [1024]; four.write(buf, 0, buf.length); //buf[]๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋ฐฐ์ด ํฌ๊ธฐ(1024๊ฐ์ ๋ฌธ์)๋งํผ ์ฐ๊ธฐ
- ์คํธ๋ฆผ ๋ซ๊ธฐ
-
fout.close();
-
๐ ํค๋ณด๋ ์ ๋ ฅ์ ํ์ผ๋ก ์ ์ฅํ๊ธฐ
import java.io.*;
import java.util.*;
public class FileWriterEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
FileWriter fout = null;
int c;
try {
fout = new FileWriter("D:\\์๋ฐ ๊ณต๋ถ\\system.ini"); //ํ์ผ๊ณผ ์ฐ๊ฒฐ๋ ์ถ๋ ฅ ๋ฌธ์ ์คํธ๋ฆผ ์์ฑ
while(true) {
String line = sc.nextLine(); //๋น ์นธ์ ํฌํจํ์ฌ ํ ์ค ์ฝ๊ธฐ
if(line.length()==0) //ํ ์ค์ <enter>ํค๋ง ์
๋ ฅํ ๊ฒฝ์ฐ
break;
fout.write(line, 0, line.length()); //์ฝ์ ๋ฌธ์์ด์ ํ์ผ์ ์ ์ฅ
fout.write("\r\n", 0, 2); //ํ ์ค ๋๊ธฐ ์ํด \r\n์ ํ์ผ์ ์ ์ฅ
}
fout.close();
}catch(IOException e) {
System.out.println("์
์ถ๋ ฅ ์ค๋ฅ");
}
sc.close();
}
}
๐๋ฐ์ดํธ ์คํธ๋ฆผ ํด๋์ค
- ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ ์์คํ ์ด๋ค.
- InputStream/OutputStream - ์ถ์ ํด๋์ค์ด๋ฉฐ ๋ฐ์ดํธ ์ ์ถ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ณตํต ๊ธฐ๋ฅ์ ๊ฐ์ง ์ํผํด๋์ค
- FileInputStream/FileOutputStream - ํ์ผ ์ ์ถ๋ ฅ์ ์ํ ํด๋์ค. ํ์ผ๋ก๋ถํฐ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ ์ฅํ ์ ์๋ค.
- DataInputStream/DataOutputStream - ๋ค์ํ ํ์ ์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ํํ๋ก ์ ์ถ๋ ฅํ๋ค.
๐ ํ์ผ ์ถ๋ ฅ ์คํธ๋ฆผ ์์ฑ
FileOutputStream fout = new FileOutputStream("c:\\Temp\\test.out");
//ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ถ๋ ฅ ์คํธ๋ฆผ ์ ์ธ๋ฌธ
- FileOutputStream ์์ฑ์๋ ํ์ผ์ ์์ฑํ์ฌ ์ฐ๊ฒฐํจ
- ํ์ผ์ด ์ด๋ฏธ ์์ผ๋ฉด ๊ทธ ๋ด์ฉ์ ์ง์ฐ๊ณ ์คํธ๋ฆผ์ ์ฐ๊ฒฐํจ
- ์ฐ๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง๋ฉด ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ๋จ
๐ ํ์ผ ์ฐ๊ธฐ
๋ฐฐ์ด์ ํ์ผ์ ์ ์ฅ
byte b[] = {7,51, 3, 4, -1, 24};
for(int i = 0; i<b.length; i++)
fout.write(b[ใ
]); //๋ฐฐ์ด b์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ด๋๋ฆฌ ๊ทธ๋๋ก ํ์ผ์ ์ ์ฅ
fout.write(b); //for๋ฌธ ์์ด ํ๋ฒ์ ์ ์ฅ
byte b[] = {1, 2, 3, 4, 5}
try {
FileOutputStream fout = new FileOutputStream("c:\\Temp\\test.out");
for(int i =0; i<b.length; i++)
fout.write(b[i]);
fout.close();
} catch(IOException e) {
System.out.println("์
์ถ๋ ฅ ์ค๋ฅ");
return;
๐ ํ์ผ ์ ๋ ฅ ์คํธ๋ฆผ ์์ฑ
FileInputStream fin = new FileInputStream("c:\\Temp\\test.out");
- FileInputStream ํด๋์ค๋ ํ์ผ๊ณผ ์ฐ๊ฒฐํ ๋ฐ์ดํธ ์คํธ๋ฆผ fin์ ์์ฑ
- fin์ ํ์ผ๋ก๋ถํฐ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ ๊ทธ๋๋ก ์ฝ์ด ๋ค์ธ๋ค.
๐ ํ์ผ ์ฝ๊ธฐ
byte b[] = new byte [6];
int n = 0, c;
while(c = fin.read()) != -1) { //fin.read() ๋ฉ์๋ ํธ์ถ ์ ํ์ผ ์คํธ๋ฆผ์ผ๋ก๋ถํฐ ํ ๋ฐ์ดํธ๋ฅผ ์ฝ์ด ๋ฆฌํดํ๋ค.
b[n] = (byte)c;
n++;
}
//์ ์ฝ๋๋ ์๋ ์ฝ๋ ํ ์ค๊ณผ ๊ฐ๋ค.
fin.read(b); //ํ์ผ์์ ๋ฐฐ์ด b[]์ ํฌ๊ธฐ๋งํผ ๋ฐ์ดํธ ์ฝ๊ธฐ
- ํ์ผ์ ๋์ ๋ง๋๋ฉด fin.read()๋ฉ์๋๋ -1์ ๋ฆฌํดํ๋ค.
๐๋ฒํผ ์ ์ถ๋ ฅ๊ณผ ํ์ผ ์ ์ถ๋ ฅ
- ์คํธ๋ฆผ์ด ๋ฒํผ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด ์ผ์์ ์ผ๋ก ํ์ผ ์ถ๋ ฅ ์คํธ๋ฆผ์ด ํ์ผ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฌ์ ๋ชจ์ ๋์๋ค๊ฐ, ํ ๋ฒ์ ์ด์์ฒด์ API๋ฅผ ํธ์ถํ์ฌ ํ์ผ์ ์ฐ๊ฒ ํ๋ฉด, ์ด์์ฒด์ ์ ๋ถ๋ด์ ์ค์ด๊ณ ์ฅ์น๋ฅผ ๊ตฌ๋ํ๋ ์ผ์ด ์ค์ด๋ค๊ฒ ๋์ด ์์คํ ์ ์๋๋ ํจ์จ์ด ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
- ๋ฒํผ๋ฅผ ๊ฐ์ง๋ ์คํธ๋ฆผ์ ๋ฒํผ ์คํธ๋ฆผ (Buffered Stream)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ฐ์ดํธ ๋ฒํผ ์คํธ๋ฆผ = BufferedInputStream, BufferedOutputStream
- ๋ฌธ์ ๋ฒํผ ์คํธ๋ฆผ = BufferedReader, BufferedWriter
- ๋ฒํผ์ ๋จ์์๋ ๋ฐ์ดํฐ ์ถ๋ ฅ
bout.flush();
๐ File ํด๋์ค
- ํ์ผ ํฌ๊ธฐ์ ํ์ ์ ์์๋ด๊ณ ํ์ผ ์ญ์ , ์ด๋ฆ ๋ณ๊ฒฝ, ๋๋ ํฐ๋ฆฌ ์์ฑ ๋ฑ ๋ค์ํ ์์ ์ ํ ์ ์๋ค.
- length() -> ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๋ฆฌํด
- getName() -> ํ์ผ๋ช ๋ฆฌํด
- getPath() -> ์์ ๊ฒฝ๋ก๋ช ๋ฆฌํด
- getParent() -> ๋ถ๋ชจ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฌธ์์ด๋ก ๋ฆฌํด
- isFile() -> ๊ฒฝ๋ก๋ช ์ด ํ์ผ์ผ ๊ฒฝ์ฐ true ๋ฆฌํด
- isDirectory() -> ๊ฒฝ๋ก๋ช ์ด ๋๋ ํฐ๋ฆฌ์ผ ๊ฒฝ์ฐ true ๋ฆฌํด
- listFiles() -> File ๊ฐ์ฒด๊ฐ ๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก๋ช ์ ๊ฐ์ง ๊ฒฝ์ฐ, ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ํ์ผ๊ณผ ์๋ธ ๋๋ ํฐ๋ฆฌ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ฆฌํด
'Java > Java ๊ธฐ๋ณธ ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] this์ this()์ ์ฐจ์ด (0) | 2021.10.18 |
---|---|
[J06] Java_์๋ฐ GUI ๊ธฐ์ด, AWT์ ์ค์ (1) (0) | 2021.09.18 |
[J04] Java_๋ชจ๋๊ณผ ํจํค์ง (0) | 2021.09.10 |
[J03] Java_์์ (0) | 2021.09.03 |
[J02] Java_ํด๋์ค์ ๊ฐ์ฒด (0) | 2021.08.27 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!