JAVA - I.O(입출력) > 기반 스트림

입출력

Input 과 Output의 약자, 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고 받는것

장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을

사용하기 위해 입출력 데이터를 처리할 공통 적인 방법으로 스트림 이용

 

스트림

입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공하는 클래스

모든 스트림은 단방향이며 각각의 장치마다 연결할 수 있는 스트림 존재

하나의 스트림으로 입출력을 동시에 수행할 수 없으므로 동시에 수행하려면 2개의 스트림필요

 

스트림 종류

 

 

File

파일 시스템의 파일을 표현하는 클래스

파일 크기, 파일 속성, 파일 이름 등의 정보와 파일 생성 및 삭제 기능 제공

 

File 객체 생성

 

파일 생성및, 폴더 생성

createNewFile() - 파일생성

mkdir() - 해당위치의 폴더생성

mkdirs() - 해당위치까지 없는 폴더 전부다 생성

 

IOException 예외발생

IOException 예외는 CheckedException 이기때문에 try-catch로 예외처리필수

입출력 파트에서는 대부분이 ? 전부 ? CheckException 이다.

 

 

temp 폴더에 test.txt 파일생성완료

 

 

FileOutputStream

파일로부터 바이트 단위로 저장할 때 사용

그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 데이터를 파일로 저장

OutputStream의 하위 클래스로 InputStream과 사용 방법 동일

 

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Run {
    public static void main(String[] args) {
        Test1 t = new Test1();
        t.fileInput();
    }
}
 
class Test1{
    // FileOutputStream
    public void fileInput() {
        //1. FileOutputStream 객체 생성
        
        FileOutputStream fos = null;
        
        // new FileOutputStream(경로);
        // 저같은경우는 그냥 프로젝트에 생성하겠음
        try {
            fos = new FileOutputStream("test.txt");
            
            // 파일에 글자 입력하기
            
            // 1. 정수입력하여 입력하기
            fos.write('A'); //txt는 문자로받기때문에 txt파일에 입력될때는 'A' 형식으로 입력됨 유니코드표 참조
            fos.write(66); // 'B'
            fos.write(' '); // 띄어쓰기
            fos.write(70); //F 출력
            System.out.println("??");
            
            // 2. byte[] 이용하여 입력하기
            byte[] bArr = {'a''c''o''d'' '};
            fos.write(bArr);
            
            // 3. write(b, off, len) (byte[], 몇번째부터, 몇개) 뽑아오기
            fos.write(bArr, 12); // 1번 인덱스부터 2개 가져오기 c,o
            
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
}
 
cs

 

결과

 

FileInputStream

파일로부터 바이트 단위로 저장할 때 사용

그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 데이터를 파일로 저장

OutputStream의 하위 클래스로 OutputStream과 사용 방법 동일

 

FileInputStream객체가 생성될 때 파일과 직접 연결됨

만약 파일이 존재하지 않으면 FileNotFoundException이 발생하므로 예외처리 필수임

 

 

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class Run {
    public static void main(String[] args) {
        Test1 t = new Test1();
        t.fileOutput();
        t.fileInput();
    }
}
 
class Test1{
    // FileOutputStream
    public void fileOutput() {
        //1. FileOutputStream 객체 생성
        
        FileOutputStream fos = null;
        
        // new FileOutputStream(경로);
        // 저같은경우는 그냥 프로젝트에 생성하겠음
        try {
            fos = new FileOutputStream("test.txt");
            
            // 파일에 글자 입력하기
            
            // 1. 정수입력하여 입력하기
            fos.write('A'); //txt는 문자로받기때문에 txt파일에 입력될때는 'A' 형식으로 입력됨 유니코드표 참조
            fos.write(66); // 'B'
            fos.write(' '); // 띄어쓰기
            fos.write(70); //F 출력
            
            // 2. byte[] 이용하여 입력하기
            byte[] bArr = {'a''c''o''d'' '};
            fos.write(bArr);
            
            // 3. write(b, off, len) (byte[], 몇번째부터, 몇개) 뽑아오기
            fos.write(bArr, 12); // 1번 인덱스부터 2개 가져오기 c,o
            
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
    
    public void fileInput() {
        
        FileInputStream fis = null;
        
        try {
            // 1.InputStream 생성
            fis = new FileInputStream("test.txt");
            
            // 2. read() 이용하여 하나씩 읽어오기
            //System.out.println(fis.read()); // 반환값 int read한번사용할때마다 하나의 문자만 읽어옴
            // 그래서 read사용할때는 반복문 함께사용
            // 만약 read()가 읽어올값이없으면 -1반환
            int value = 0;
            while((value = fis.read()) != -1) {
                System.out.print((char) value); //AB Facod co
                // int 형으로 반환이되기때문에 char으로 강제형변환시켜 출력
            }
            
            
            
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
}
 
cs

 

 

문자기반 스트림

자바 에서는 한 문자를 의미하는 char형이 2byte

1byte를 다루는 바이트 기반(OutputStream, InputStream) 스트림으로는 2byte 문자를 처리하기 어려우므로

이를 보완하기 사용

FileReader / FilWriter 

 

Writer

Writer 사용법입니다.

Writer 문자열도 가능하고 문자도가능하고 바이트기반 스트림보다 편하게 사용가능합니다.

아래 메소드를 사용하면 charTest.txt 파일 생성 혹은 덮어씌우기에 텍스트추가 되는 되는 실습입니다.

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
 
    public void fileSave() {
        FileWriter fw = null;
        
        try {
            // 파일이 존재하지 않으면 자동으로 파일 생성. 기존에 파일이 있으면 덮어쓰기 처리.
            // 추가로 값을 넣는 이어쓰기 처리를 하고 싶다면 매개변수 생성자에 true 추가
            fw = new FileWriter("charTest.txt"true);
            
            // 1. write(int c) 2. write(char[] cbuf) 3. write(char[] cbuf, int off, int len)
            // 4. write(String str) 5. write(String str, int off, int len)
            
            fw.write("편하게 스트링으로"); // 4번
            fw.write("사용가능 안가능"04); // 5번
            fw.write(' ');
            
            char[] cArr = {'가''''c'};
            fw.write(cArr);
            fw.write(cArr,1,2); // 3번
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
cs

Reader

읽기

 

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
    public void fileOpen() {
        FileReader fr = null;
        
        try {
            fr = new FileReader("charTest.txt");
            /*
            int value = 0;
            while((value = fr.read()) != -1) {
                System.out.print((char)value);
            }
            */
            
            char[] cArr = new char[20];
            int textCnt = fr.read(cArr);
            System.out.println(textCnt);
            System.out.println(Arrays.toString(cArr));
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
}
cs

 

 

다음엔 보조 스트림에 대해 알아봤다 ..

너무편리한데 ..

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA - 컬렉션 프레임워크  (0) 2021.06.07
JAVA - I.O(입출력) > 보조 스트림  (0) 2021.06.04
JAVA - 예외처리  (0) 2021.06.03
JAVA - DATE, Calendar,  (0) 2021.06.02
JAVA - String 클래스  (0) 2021.05.31
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유