본문 바로가기

프로그래밍/개인 복습 공부

Java_I/O 입출력 스트림 파일 생성하기

스트림 (Stream)

: 스트림이란 데이터가 이동하는 통로이다.

- 운영체제에 의해 생성되는 가상의 연결고리이다.

- 큐(Queue)와 같은 선입선출(FIFO) 형태로 데이터가 전송

 

I/O Stream

- 단방향 통신을 지원하는 기능

- 서로 통신을 위한 Input Stream / Output Stream 2개가 필요

 

 

바이트 입출력 스트림

: 1byte 단위 - 영상, 음성, 영문자의 binary 데이터 처리

 

InputStream

바이트 단위 입력 스트림 최상위 추상 클래스

FileInputStream : 파일에서 바이트 단위로 자료를 읽음.

FIlterInputStream : 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림 상위 클래스

 

OutputStream

바이트 단위 출력 스트림 최상위 추상 클래스

FileOutputStream : 파일에서 바이트 단위로 자료를 씀.

FileOutputStream : 기반 스트림에서 자료를 읽을 때 추가 기능을 제공하는 보조 스트림의 상위 클래스

 

InputStream 클래스는 read() 메소드, OutputStream 클래스는 write() 메소드

 

보조 스트림

- 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림

- FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스들

- 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 보조 스트림)을 가짐

 

예제

데스크탑 로컬에 파일 생성해서 파일에 문자열, 값 저장하는 예제

Stream_fileOutputStream

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package ch01;
 
import java.io.FileOutputStream;
import java.io.IOException;
 
 
public class Stream_FileOutputStream {
 
    public static void main(String[] args) {
 
        FileOutputStream fos = null;
 
        try {
            // FileOutputStream으로 파일 생성
            // 바이트 단위
 
            // FileOutputStream 파일을 생성할 곳을 지정
            fos = new FileOutputStream("c:/tmp/output.txt");
 
            fos.write(100); // d
            fos.write(99); // c
        } catch (IOException e) {
            System.out.println("파일 생성 안됨");
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    } // end of main
// end of class
cs

 

Stream_FileOutputStream2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package ch01;
 
import java.io.FileOutputStream;
import java.io.IOException;
 
 
public class Stream_FileOutputStream2 {
 
    public static void main(String[] args) {
 
        FileOutputStream fos = null;
 
        try {
            // FileOutputStream으로 파일 생성
            // 바이트 기반
            // A ~ Z까지 출력하기
            
            // 바이트 기반이기 때문에 A~Z까지 찍기 위해 26개 배열 생성
            byte[] b = new byte[26];
            // 65 : A, 66 : B, ...
            byte data = 65;
            fos = new FileOutputStream("c:/tmp/output2.txt");
 
            for (int i = 0; i < b.length; i++) {
                fos.write(data);
                data++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
    } // end of main
 
// end of class
cs

 

Stream_FileOutputStream3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package ch01;
 
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Stream_FileOutputStream3 {
 
    public static void main(String[] args) {
        FileOutputStream fos = null;
 
        try {
            fos = new FileOutputStream("c:/tmp/output3.txt");
            // 넣고 싶은 문자열을 생성하여 byte[] 배열에 .getBytes()메서드 사용하기
            String msg = "hello world";
            byte[] b = msg.getBytes();
 
            for (int i = 0; i < b.length; i++) {
                fos.write(b[i]);
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

Stream_FileReader_FileWriter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package ch01;
 
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class Stream_FileReader_FileWriter {
 
    public static void main(String[] args) {
 
        FileReader fr = null;
        FileWriter fw = null;
 
        try {
            // 읽어올 파일을 생성을 안 하고 실행해서 오류 났었음.
            fr = new FileReader("c:/tmp/readerex.txt");
            fw = new FileWriter("c:/tmp/writerex.txt");
 
            int i;
            fw.write("hihihihi \n");
            while ((i = fr.read()) != -1) {
                fw.write(i + "\n");
            }
            fw.write("byebyebye \n");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
                fw.flush();
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

Stream_FileReader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package ch01;
 
import java.io.FileReader;
 
// FileReader로 텍스트 읽어오기.
// 문자 단위로 읽어옴.
public class Stream_FileReader {
 
    public static void main(String[] args) {
 
        FileReader fr = null;
 
        try {
            // c드라이버 tmp폴더의 a텍스트 파일에 적은 내용을 읽어옴.
            fr = new FileReader("c:\\tmp\\a.txt");
            int i;
            // i에 읽어온 내용 저장하고 파일 끝까지 읽음(!= -1)
            while ((i = fr.read()) != -1) {
                System.out.print((char) i);
            }
        } catch (Exception e) {
            System.out.println("입출력 오류났어");
            e.printStackTrace();
        }
    } // end of main
 
// end of class
cs

 

Stream_FileWriter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package ch01;
 
import java.io.FileWriter;
import java.io.IOException;
 
// FileWriter
// 문자 기반
public class Stream_FileWriter {
 
    public static void main(String[] args) {
        FileWriter fw = null;
 
        try {
            // String, char 가능
            fw = new FileWriter("c:/tmp/writer1.txt");
            
            String msg = "asfdasdf";
            char[] buf = { 'H''I' };
 
            fw.write('A');
            fw.write(msg);
            fw.write(buf);
        } catch (IOException e) {
            System.out.println("출력 안됨");
            e.printStackTrace();
        } finally {
            try {
                // close() 안하면 출력 안됨. (close 안해서 출력 안됐었음.)
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

BufferedStream1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package ch01;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class BufferedStream1 {
 
    public static void main(String[] args) {
        // BufferedStream 보조 스트림 활용
        FileInputStream fis = null;
        FileOutputStream fos = null;
 
        try {
            fis = new FileInputStream("c:/tmp/a.txt");
            fos = new FileOutputStream("c:/tmp/buffered.txt");
 
            BufferedInputStream bis = new BufferedInputStream(fis);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
 
            int i;
            while ((i = bis.read()) != -1) {
                bos.write(i);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

BufferedStream2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package ch01;
 
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
 
public class BufferedStream2 {
 
    public static void main(String[] args) {
        // BufferedInputStream
 
        BufferedInputStream bis = null;
 
        try {
 
            // 보조기반스트림을 먼저 선언해서 안에 FileInputStream 넣고 사용하기 
            bis = new BufferedInputStream(new FileInputStream("c:/tmp/test.txt"));
            int i;
            while ((i = bis.read()) != -1) {
                System.out.print(i + " ");
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

BufferedStream3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package ch01;
 
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
 
public class BufferedStream3 {
 
    public static void main(String[] args) {
 
        // BufferedWriter, BufferedReader
        BufferedWriter bw = null;
 
        try {
            // bufferdWriter를 통해
            bw = new BufferedWriter(new FileWriter("c:/tmp/asdf.txt"));
 
            String str = "asdfasdfasdf";
            bw.write(str);
 
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bw.flush();
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
}
cs

 

BufferedStream4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package ch01;
 
import java.io.BufferedReader;
import java.io.FileReader;
 
public class BufferedStream4 {
 
    public static void main(String[] args) {
        BufferedReader br = null;
 
        try {
            // BufferedReader로 파일 읽어오기.
            // String으로 받아서 readLine()하고 != null 해야 한글 출력됨!
            br = new BufferedReader(new FileReader("c:/tmp/asdf.txt"));
 
            String str;
            while ((str = br.readLine()) != null) {
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
}
cs

'프로그래밍 > 개인 복습 공부' 카테고리의 다른 글

Java_단방향 통신  (0) 2023.04.17