๊ด€๋ฆฌ ๋ฉ”๋‰ด

IT’s Portfolio

[Java] Lecture - Day 17 ๋ณธ๋ฌธ

Development Study/Java

[Java] Lecture - Day 17

f1r3_r41n 2024. 6. 6. 14:44
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ–ฅ Basic Java - Day 17

๐Ÿ‘‰๐Ÿป [Chapter 13] ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ํŒŒ์ผ ์ž…์ถœ๋ ฅ

์ŠคํŠธ๋ฆผ(stream)

  • ์‚ฌ์ „์  ์˜๋ฏธ: ํ๋ฅด๋Š” ์‹œ๋ƒ‡๋ฌผ
  • ์ปดํ“จํ„ฐ ๊ณตํ•™์  ์˜๋ฏธ: ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ

์ž๋ฐ”์˜ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ

  • ์ž…์ถœ๋ ฅ ์žฅ์น˜์™€ ์ž๋ฐ” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ
    • ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ
    • ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
  • ํŠน์ง•
    • ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ๊ธฐ๋ณธ ๋‹จ์œ„: ๋ฐ”์ดํŠธ๋‚˜ ๋ฌธ์ž
    • ๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ, ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ
  • ๋ฌธ์ž ์ŠคํŠธ๋ฆผ
    • ๋ฌธ์ž๋งŒ ์ž…์ถœ๋ ฅํ•˜๋Š” ์ŠคํŠธ๋ฆผ(์ž๋ฐ”์˜ 1๋ฌธ์ž๋Š” 2bytes)
    • ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
    • ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๊นจ์ง„ ๊ธฐํ˜ธ๊ฐ€ ์ถœ๋ ฅ
    • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ฝ์œผ๋ฉด ์ฝ์„ ์ˆ˜ ์—†๋Š” ๋ฐ”์ดํŠธ๊ฐ€ ์ƒ๊ฒจ์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ
    • ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ˆœ ๋ฐ”์ดํŠธ์˜ ํ๋ฆ„์œผ๋กœ ์ฒ˜๋ฆฌ
    • ๋ฌธ์ž ๋ฐ์ดํ„ฐ ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ƒ๊ด€์—†์ด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

์ŠคํŠธ๋ฆผ ์—ฐ๊ฒฐ

InputStreamReader rd = new InputStreamReader(System.in);

while(true) {
    int c = rd.read();  // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ํ‚ค ์ž…๋ ฅ. c๋Š” ์ž…๋ ฅ๋œ ํ‚ค ๋ฌธ์ž ๊ฐ’
    if(c==-1) break;    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ๋์„ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ ์ž…๋ ฅ ์ข…๋ฃŒ
}
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ ์ฝ๊ธฐ

// ํŒŒ์ผ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ(ํŒŒ์ผ ์—ด๊ธฐ)
FileReader fr = new FileReader("PATH");
// ํŒŒ์ผ ์ฝ๊ธฐ
int c;
while((c=fr.read())!=-1) {  // ๋ฌธ์ž๋ฅผ c์— ์ฝ์Œ. ํŒŒ์ผ ๋๊นŒ์ง€ ๋ฐ˜๋ณต
    System.out.print((char)c);  // ๋ฌธ์ž c ์ถœ๋ ฅ
}
// ์ŠคํŠธ๋ฆผ ๋‹ซ๊ธฐ
fr.close()
  • ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž ์ŠคํŠธ๋ฆผ FileReader ํด๋ž˜์Šค ์ด์šฉ
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ ์—ด์–ด ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ
    • read()๋กœ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ํŒŒ์ผ์—์„œ ์ฝ์Œ
    • ์ŠคํŠธ๋ฆผ์ด ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†์„ ์‹œ close()๋กœ ๋‹ซ๊ธฐ
      • ๋‹ซํžŒ ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ์ฝ์„ ์ˆ˜ ์—†์Œ

ํŒŒ์ผ ์ž…์ถœ๋ ฅ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋™์•ˆ ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ๋™์•ˆ: FileNotFoundException ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      • ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…์ด ํ‹€๋ฆฌ๊ฑฐ๋‚˜, ๋””์Šคํฌ์˜ ๊ณ ์žฅ ๋“ฑ์œผ๋กœ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Œ
      • FileNotFoundException์€ IOException์„ ์ƒ์†๋ฐ›์Œ
    • ํŒŒ์ผ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ๋‹ซ๊ธฐ๋ฅผ ํ•˜๋Š” ๋™์•ˆ: IOException ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      • ๋””์Šคํฌ ์˜ค๋™์ž‘, ํŒŒ์ผ ์ค‘๊ฐ„์— ๊นจ์ง„ ๊ฒฝ์šฐ, ๋””์Šคํฌ ๊ณต๊ฐ„์ด ๋ชจ์ž๋ผ์„œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋ถˆ๊ฐ€
  • try-catch ๋ธ”๋ก ๋ฐ˜๋“œ์‹œ ํ•„์š”
    • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฐ•์ œ ์‚ฌํ•ญ

FileReader์˜ ์ƒ์„ฑ์ž์™€ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

FileReader(File file)   // file์— ์ง€์ •๋œ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ๋Š” FileReader ์ƒ์„ฑ
FileReader(String name) // name ์ด๋ฆ„์˜ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ฝ๋Š” FileReader ์ƒ์„ฑ
  • ์ƒ์„ฑ์ž
int read()  // ํ•œ ๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ์ฝ์–ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฆฌํ„ด
int read(char[] cbuf)   // ์ตœ๋Œ€ cbuf ๋ฐฐ์—ด ํฌ๊ธฐ๋งŒํผ ๋ฌธ์ž๋“ค์„ ์ฝ์–ด cbuf ๋ฐฐ์—ด์— ์ €์žฅ. ๋งŒ์ผ ์ฝ๋Š” ๋„์ค‘ EOF๋ฅผ ๋งŒ๋‚˜๋ฉด ์‹ค์ œ ์ฝ์€ ๋ฌธ์ž ๊ฐœ์ˆ˜ ๋ฆฌํ„ด
int read(char[] cbuf, int off, int len) // ์ตœ๋Œ€ len ํฌ๊ธฐ๋งŒํผ ์ฝ์–ด cbuf ๋ฐฐ์—ด์˜ off๋ถ€ํ„ฐ ์ €์žฅ. ์ฝ๋Š” ๋„์ค‘ EOF๋ฅผ ๋งŒ๋‚˜๋ฉด ์‹ค์ œ ์ฝ์€ ๋ฌธ์ž ๊ฐœ์ˆ˜ ๋ฆฌํ„ด
String getEncoding()    // ์ŠคํŠธ๋ฆผ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ์˜ ์ด๋ฆ„ ๋ฆฌํ„ด
void close()    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ณ  ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ž์› ํ•ด์ œ
  • ์ฃผ์š” ๋ฉ”์†Œ๋“œ
import java.io.*;

public class FileExam01 {
    static final String PATH = "C:/windows/system.ini";
    public static void main(String[] args) {
        try {
            FileReader fr = new FileReader(PATH);
            int c;
            while((c=fr.read())!=-1) {
                System.out.print((char)c);
            }
            fr.close();
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}
  • FileReader ์˜ˆ์ œ

๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ ์“ฐ๊ธฐ

// ํŒŒ์ผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ(ํŒŒ์ผ ์—ด๊ธฐ)
FileWriter fw = new FileWriter("PATH");
// ํŒŒ์ผ ์“ฐ๊ธฐ
fw.write('A');  // ๋ฌธ์ž 'A'๋ฅผ ํŒŒ์ผ์— ๊ธฐ๋ก
char[] buf = new char[1024];
fw.write(buf, 0, buf.length);   // buf[0]๋ถ€ํ„ฐ ๋ฒ„ํผ ํฌ๊ธฐ๋งŒํผ ์“ฐ๊ธฐ
// ์ŠคํŠธ๋ฆผ ๋‹ซ๊ธฐ
fw.close()
  • ํ…์ŠคํŠธ ํŒŒ์ผ์— ์“ฐ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž ์ŠคํŠธ๋ฆผ FileWriter ํด๋ž˜์Šค ์ด์šฉ
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ์„ ์—ด์–ด ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ
    • write()๋กœ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ํŒŒ์ผ์— ๊ธฐ๋ก
      • ๋ธ”๋ก ๋‹จ์œ„๋กœ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
    • ์ŠคํŠธ๋ฆผ์ด ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†์„ ์‹œ close()๋กœ ๋‹ซ๊ธฐ
      • ๋‹ซํžŒ ์ŠคํŠธ๋ฆผ์—์„œ๋Š” ๊ธฐ๋กํ•  ์ˆ˜ ์—†์Œ

FileWrite์˜ ์ƒ์„ฑ์ž์™€ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

FileWriter(File file)   // file์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  FileWriter ์ƒ์„ฑ
FileWriter(String name) // name ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  FileWriter ์ƒ์„ฑ
FileWriter(File file, boolean append)   // FileWriter๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, append๊ฐ€ true์ด๋ฉด ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ
FileWriter(String name, boolean append) // FileWriter๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, append๊ฐ€ true์ด๋ฉด ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • ์ƒ์„ฑ์ž
void write(int c)   // c๋ฅผ char๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•œ ๊ฐœ์˜ ๋ฌธ์ž ์ถœ๋ ฅ
void write(String str, int off, int len)    // ์ธ๋ฑ์Šค off๋ถ€ํ„ฐ len๊ฐœ์˜ ๋ฌธ์ž๋ฅผ str ๋ฌธ์ž์—ด์—์„œ ์ถœ๋ ฅ
void write(char[] cbuf, int off, int len)   // ์ธ๋ฑ์Šค off๋ถ€ํ„ฐ len๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ๋ฐฐ์—ด cbuf์—์„œ ์ถœ๋ ฅ
void flush()    // ์ŠคํŠธ๋ฆผ์— ๋‚จ์•„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ
String getEncoding()    // ์ŠคํŠธ๋ฆผ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ์˜ ์ด๋ฆ„ ๋ฆฌํ„ด
void close()    // ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ณ  ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ž์› ํ•ด์ œ
  • ์ฃผ์š” ๋ฉ”์†Œ๋“œ
import java.io.*;

public class FileExam02 {
    static final String PATH = "temp/text.txt";
    public static void main(String[] args) {
        InputStreamReader isr = new InputStreamReader(System.in);
        int c;
        try {
            FileWriter fw = new FileWriter(PATH);
            while((c=isr.read())!=-1) {
                fw.write(c);    // ํ‚ค๋ณด๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฌธ์ž๋ฅผ ํŒŒ์ผ์— ์ €์žฅ
            }
            isr.close();
            fw.close();
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}
  • ํ…์ŠคํŠธ ํŒŒ์ผ ์“ฐ๊ธฐ ์˜ˆ์ œ

๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์“ฐ๊ธฐ

// ํŒŒ์ผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ(ํŒŒ์ผ ์—ด๊ธฐ)
FileOutputStream fos = new FileOutputStream("PATH");
// ํŒŒ์ผ ์“ฐ๊ธฐ
byte[] b = {7, 51, 3, 4, -1, 24};
for(int i=0;i<b.length;i++) fos.write(b[i]);  // ๋ฐฐ์—ด b๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ทธ๋Œ€๋กœ ๊ธฐ๋ก
// ์ŠคํŠธ๋ฆผ ๋‹ซ๊ธฐ
fos.close()
  • ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ๋ณ€์ˆ˜, ๋ฐฐ์—ด, ๋ฒ„ํผ์— ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ ํŒŒ์ผ์— ๊ทธ๋Œ€๋กœ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด FileWriter ํด๋ž˜์Šค ์ด์šฉ
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ์„ ์—ด์–ด ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ
    • write() ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ํŒŒ์ผ์— ๊ธฐ๋ก
    • ์ŠคํŠธ๋ฆผ์ด ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†์„ ์‹œ close()๋กœ ๋‹ซ๊ธฐ

FileOutputStream์˜ ์ƒ์„ฑ์ž์™€ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

FileOutputStream(File file) // file์ด ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์— ์ถœ๋ ฅํ•˜๋Š” FileOutputStream ์ƒ์„ฑ
FileOutputStream(String name) // name์ด ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์— ์ถœ๋ ฅํ•˜๋Š” FileOutputStream ์ƒ์„ฑ
FileOutputStream(File file, boolean append) // FileOutputStream์„ ์ƒ์„ฑํ•˜์—ฌ append๊ฐ€ true์ด๋ฉด file์ด ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ
FileOutputStream(String name, boolean append) // FileOutputStream์„ ์ƒ์„ฑํ•˜์—ฌ appen๊ฐ€ true์ด๋ฉด name ์ด๋ฆ„์˜ ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • ์ƒ์„ฑ์ž
void write(int b) // int ํ˜•์œผ๋กœ ๋„˜๊ฒจ์ง„ ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅ
void write(byte[] b)  // ๋ฐฐ์—ด b์˜ ๋ฐ”์ดํŠธ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅ
void write(byte[] b, int off, int len)  // len ํฌ๊ธฐ๋งŒํผ off๋ถ€ํ„ฐ ๋ฐฐ์—ด b๋ฅผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ถœ๋ ฅ
void flush()  // ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ๋‚จ์•„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ
void close()  // ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ณ  ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ž์› ํ•ด์ œ
  • ์ฃผ์š” ๋ฉ”์†Œ๋“œ
import java.io.*;

public class FileExam02 {
    static final String PATH = "temp/test.out";
    public static void main(String[] args) {
        byte[] b = {7, 51, 3, 4, -1, 24};
        try {
            FileOutputStream fos = new FileOutputStream(PATH);
            fos.write(b);
            fos.close();
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์“ฐ๊ธฐ ์˜ˆ์ œ

๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ฝ๊ธฐ

// ํŒŒ์ผ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ(ํŒŒ์ผ ์—ด๊ธฐ)
FileInputStream fis = new FileInputStream("PATH");
// ํŒŒ์ผ ์ฝ๊ธฐ
int n=0, c;
while((c=fis.read())!=-1) {
    b[n] = (byte)c;    // ์ฝ์€ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์— ์ €์žฅ
    n++;
}
// fin.read(b); -> ๋ฐฐ์—ด b์˜ ๋ฐ”์ดํŠธ ํฌ๊ธฐ๋งŒํผ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ทธ๋Œ€๋กœ ์ฝ๊ธฐ
// ์ŠคํŠธ๋ฆผ ๋‹ซ๊ธฐ
fin.close();
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์—์„œ ์ฝ๊ธฐ ์œ„ํ•ด FileInputStream ํด๋ž˜์Šค ์ด์šฉ
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ์„ ์—ด์–ด ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ
    • read()๋กœ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ํŒŒ์ผ์—์„œ ์ฝ๊ธฐ
    • ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ฝ๊ธฐ ๊ฐ€๋Šฅ
    • ์ŠคํŠธ๋ฆผ์ด ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†์„ ์‹œ close()๋กœ ๋‹ซ๊ธฐ

FileInputStream์˜ ์ƒ์„ฑ์ž์™€ ์ฃผ์š” ๋ฉ”์†Œ๋“œ

FileInputStream(File file) // file์ด ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์— ์ถœ๋ ฅํ•˜๋Š” FileInputStream ์ƒ์„ฑ
FileInputStream(String name) // name์ด ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์— ์ถœ๋ ฅํ•˜๋Š” FileInputStream ์ƒ์„ฑ
  • ์ƒ์„ฑ์ž
int read()    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด intํ˜•์œผ๋กœ ๋ฆฌํ„ด
int read(byte[] b)    // ์ตœ๋Œ€ ๋ฐฐ์—ด b์˜ ํฌ๊ธฐ๋งŒํผ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์Œ. ์ฝ๋Š” ๋„์ค‘ EOF๋ฅผ ๋งŒ๋‚˜๋ฉด ์‹ค์ œ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜ ๋ฆฌํ„ด
int read(byte[] b, int off, int len)    // ์ตœ๋Œ€ len ๊ฐœ์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด b ๋ฐฐ์—ด์˜ off ์œ„์น˜์— ์ €์žฅ. ์ฝ๋Š” ๋„์ค‘ EOF๋ฅผ ๋งŒ๋‚˜๋ฉด ์‹ค์ œ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜ ๋ฆฌํ„ด
int available()    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ํ˜„์žฌ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ˆ˜ ๋ฆฌํ„ด
void close()    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ณ  ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ž์› ํ•ด์ œ
  • ์ฃผ์š” ๋ฉ”์†Œ๋“œ
import java.io.*;

public class FileExam02 {
    static final String PATH = "temp/test.out";
    public static void main(String[] args) {
        byte[] b = new byte[6];
        try {
            FileInputStream fis = new FileInputStream(PATH);
            int n=0, c;
            while((c=fis.read())!=-1) {
                b[n] = (byte)c;
                n++;
            }
            for(byte t:b)
                System.out.print(t+" ");
            System.out.println();
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ฝ๊ธฐ ์˜ˆ์ œ

File ํด๋ž˜์Šค

  • ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ช… ๋ฐ ์†์„ฑ์„ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค
    • java.io.File
    • ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ ์˜ ์ถ”์ƒ์  ํ‘œํ˜„
  • ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์‚ญ์ œ, ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ, ํฌ๊ธฐ ๋“ฑ ํŒŒ์ผ ๊ด€๋ฆฌ
  • File ๊ฐ์ฒด์—๋Š” ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ธฐ๋Šฅ ์—†์Œ
    • ํŒŒ์ผ ์ž…์ถœ๋ ฅ์€ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ด์šฉ
  • File f = new File("file PATH");
    • ์ƒ์„ฑ์ž์— ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…์„ ์ง์ ‘ ํ• ๋‹นํ•˜์—ฌ ์ƒ์„ฑ
  • File f = new File("directory PATH", "file PATH");
    • ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํŒŒ์ผ๋ช… ๋‚˜๋ˆ„์–ด ํ• ๋‹นํ•˜์—ฌ ์ƒ์„ฑ
File(File parent, String child)    // parent ๋””๋ ‰ํ„ฐ๋ฆฌ์— child ์ด๋ฆ„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ํŒŒ์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” File ๊ฐ์ฒด ์ƒ์„ฑ
File(String pathname)    // pathname์˜ ์™„์ „ ๊ฒฝ๋กœ๋ช…์ด ๋‚˜ํƒ€๋‚ด๋Š” File ๊ฐ์ฒด ์ƒ์„ฑ
File(String parent, String child)    // parent ๋””๋ ‰ํ„ฐ๋ฆฌ์— child ์ด๋ฆ„์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‚˜ ํŒŒ์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” File ๊ฐ์ฒด ์ƒ์„ฑ
File(URI uri)    // file:URI๋ฅผ ์ถ”์ƒ ๊ฒฝ๋กœ๋ช…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ File ๊ฐ์ฒด ์ƒ์„ฑ
  • ์ƒ์„ฑ์ž
boolean mkdir()    // ์ƒˆ๋กœ์šด ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ
String[] list()    // ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ๊ณผ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด
File[] listFiles()    // ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ๊ณผ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋ฅผ File[] ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด
boolean renameTo(File dest)    // dest๊ฐ€ ์ง€์ •ํ•˜๋Š” ๊ฒฝ๋กœ๋ช…์œผ๋กœ ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ
boolean delete()    // ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ์‚ญ์ œ
long length()    // ํŒŒ์ผ์˜ ํฌ๊ธฐ ๋ฆฌํ„ด
String getPath()    // ๊ฒฝ๋กœ๋ช… ์ „์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ด
String getParent()    // ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„ ๋ฆฌํ„ด
String getName() // ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฆฌํ„ด
boolean isFile()    // ์ผ๋ฐ˜ ํŒŒ์ผ์ด๋ฉด true ๋ฆฌํ„ด
boolean isDirectory() // ๋””๋ ‰ํ„ฐ๋ฆฌ์ด๋ฉด true ๋ฆฌํ„ด
long lastModified()    // ํŒŒ์ผ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์‹œ๊ฐ„ ๋ฆฌํ„ด
boolean exists()    // ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋ฉด true ๋ฆฌํ„ด
  • ์ฃผ์š” ๋ฉ”์†Œ๋“œ

File ํด๋ž˜์Šค ํ™œ์šฉ

File f = new File("c:/windows/system.ini");

// ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…
String filename = f.getName();    // "system.ini"
String path = f.getPath();    // "c:\\windows\\system.ini"
String parent = f.getParent();    // "c:\\windows"

// ํŒŒ์ผ ํฌ๊ธฐ
long size = f.length();

// ํŒŒ์ผ ํƒ€์ž…
if(f.isFile())
    System.out.println(f.getPath() + "๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.");        // ํŒŒ์ผ
else if(f.isDirectory())
    System.out.println(f.getPath() + "๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค.");    // ๋””๋ ‰ํ„ฐ๋ฆฌ

// ๋””๋ ‰ํ„ฐ๋ฆฌ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ ์–ป๊ธฐ
File f = new File("c:/Temp");
for(File t:f.listFiles()) {
    System.out.print(t.getName());    // ์„œ๋ธŒ ํŒŒ์ผ๋ช…
    System.out.println("\tํŒŒ์ผ ํฌ๊ธฐ: " + t.length());    // ํŒŒ์ผ ํฌ๊ธฐ
}
import java.io.*;

public class FileExam03 {

    public static void listDirectory(File dir) {
        System.out.println(
                "-----" + dir.getPath()
                + "์˜ ์„œ๋ธŒ ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.-----"
        );
        File[] subFiles = dir.listFiles();
        for(File f:subFiles) {
            long t = f.lastModified();  // ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ์‹œ๊ฐ„
            System.out.print(f.getName());
            System.out.print("\tํŒŒ์ผ ํฌ๊ธฐ: " + f.length()); // ํŒŒ์ผ ํฌ๊ธฐ
            System.out.printf("\t์ˆ˜์ •ํ•œ ์‹œ๊ฐ„: %tb %td %ta %tT\n", t, t, t, t);
        }
    }

    public static void main(String[] args) {
        File f1 = new File("c:/windows/system.ini");
        System.out.println(f1.getPath() + ", " + f1.getParent() + ", " + f1.getName());
        String res = (f1.isFile())?"ํŒŒ์ผ":"๋””๋ ‰ํ† ๋ฆฌ";
        System.out.println(f1.getPath()+"์€ "+res+"์ž…๋‹ˆ๋‹ค.");

        File f2 = new File("c:/Temp/java_sample");
        if(!f2.exists()) f2.mkdir();
        listDirectory(new File("c:/Temp"));
        f2.renameTo(new File("c:/Temp/javasample"));
        listDirectory(new File("c:/Temp"));
    }
}
  • File ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์ œ
import java.io.*;

public class FileExam04 {
    public static void main(String[] args) {
        File src = new File("c:/windows/system.ini");   // ์›๋ณธ ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…
        File dest = new File("c:/Temp/system.txt"); // ๋ณต์‚ฌ ํŒŒ์ผ ๊ฒฝ๋กœ๋ช…
        int c;
        try {
            FileReader fr = new FileReader(src);    // ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ
            FileWriter fw = new FileWriter(dest);   // ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ
            while((c=fr.read())!=-1) {
                fw.write((char)c);
            }
            fr.close();
            fw.close();
            System.out.println(
                    src.getPath() + "๋ฅผ "
                    + dest.getPath() + "๋กœ ๋ณต์‚ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค."
            );
        } catch(IOException e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}
  • ํ…์ŠคํŠธ ํŒŒ์ผ ๋ณต์‚ฌ ์˜ˆ์ œ
import java.io.*;

public class FileExam05 {
    public static void main(String[] args) {
        File src = new File("c:/Temp/img.jpg");
        File dest = new File("c:/Temp/back.jpg");
        int c;
        try {
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(dest);
            while((c=fis.read())!=-1) { // ํ•œ ๋ฐ”์ดํŠธ์”ฉ ๋ณต์‚ฌํ•˜๊ธฐ์— ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋จ
                fos.write((byte)c);
            }
            fis.close();
            fos.close();
            System.out.println(
                    src.getPath() + "๋ฅผ "
                            + dest.getPath() + "๋กœ ๋ณต์‚ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค."
            );
        } catch(IOException e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ๋ณต์‚ฌ ์˜ˆ์ œ
import java.io.*;

public class FileExam06 {
    public static void main(String[] args) {
        File src = new File("c:/Temp/img.jpg");
        File dest = new File("c:/Temp/back.jpg");
        try {
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(dest);
            byte[] buf = new byte[1024*10]; // 10kb ๋ฒ„ํผ
            while(true) {
                int n = fis.read(buf);  // ๋ฒ„ํผ ํฌ๊ธฐ๋งŒํผ ์ฝ๊ธฐ. n์€ ์‹ค์ œ ์ฝ์€ ๋ฐ”์ดํŠธ
                fos.write(buf, 0, n);   // buf[0]๋ถ€ํ„ฐ n ๋ฐ”์ดํŠธ ์“ฐ๊ธฐ
                if(n<buf.length) break; // ๋ฒ„ํผ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘๊ฒŒ ์ฝ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ๋์— ๋„๋‹ฌ. ๋ณต์‚ฌ ์ข…๋ฃŒ
            }
            fis.close();
            fos.close();
            System.out.println(
                    src.getPath() + "๋ฅผ "
                            + dest.getPath() + "๋กœ ๋ณต์‚ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค."
            );
        } catch(IOException e) {
            System.out.println(e);
            e.printStackTrace();
        }
    }
}
  • ๋ธ”๋ก ๋‹จ์œ„ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ๋ณต์‚ฌ ์˜ˆ์ œ

System.out.printf()

  • ์„œ์‹์ด ์žˆ๋Š” ์ถœ๋ ฅ
    • %d: ์ •์ˆ˜ํ˜• ์ถœ๋ ฅ
    • %s: ๋ฌธ์ž์—ด ์ถœ๋ ฅ
    • %f: ์‹ค์ˆ˜ํ˜• ์ถœ๋ ฅ
    • %c: ๋ฌธ์ž ์ถœ๋ ฅ
    • %n: ์ค„ ๋ฐ”๊ฟˆ
    • %b: boolean ์ถœ๋ ฅ
  • ๋‚ ์งœ ์‹œ๊ฐ„ ์ •๋ณด ์ถœ๋ ฅ
    • %tH: hour ์ถœ๋ ฅ
    • %tM: minute ์ถœ๋ ฅ
    • %tS: second ์ถœ๋ ฅ
    • %tA: ์š”์ผ
    • %td: ์ผ์ž
    • %tB: ๋‹ฌ(month)
    • %tY: ์—ฐ๋„(year)
728x90
๋ฐ˜์‘ํ˜•

'Development Study > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] Lecture - Day 19  (0) 2024.06.07
[Java] Lecture - Day 18  (1) 2024.06.06
[Java] Lecture - Day 16  (1) 2024.05.17
[Java] Lecture - Day 15  (0) 2024.04.26
[Java] Lecture - Day 14  (0) 2024.04.05
Comments