ABOUT ME

Today
Yesterday
Total
  • [JAVA] 입출력 스트림/파일 입출력/FileReader/FileWriter
    Languages/Java 2021. 4. 23. 18:34
    반응형

     

     

     

     

    스트림

     

    스트림 입출력

     버퍼를 가지고 순차적으로 이루어지는 입출력

     

    자바의 입출력 스트림

     

    응용 프로그램과 입출력 장치를 연결하는 소프트웨어 모듈

    입력 스트림 : 입력 장치로부터 자바 프로그램으로

    출력 스트림 : 출력 장치로 데이터 출력

     

    자바의 입출력 스트림 특징

     

    스트림의 양끝에 입출력장치와 자바 응용프로그램

     

    스트림은 단방향

     입력과 출력을 동시에 하는 스트림은 없음

    입출력 스트림 기본 단위

     바이트 스트림의 경우 : 바이트

     문자 스트림의 경우 : 문자(자바에서는 문자1개 : 2바이트)

    선입선출 구조(FIFO구조)

    스트림은 연결될 수 있다.

     

    자바의 입출력 스트림 종류

     

    바이트 스트림과 문자 스트림

     

    바이트 스트림

     입출력되는 데이터를 단순 바이트로 처리

     ex)바이너리 파일을 읽는 입력 스트림

    문자 스트림

     문자만 입출력하는 스트림

     문자가 아닌 바이너리 데이터는 스트림에서 처리 하지 못한다

     ex)텍스트 파일을 읽는 입력 스트림

    JDK는 입출력 스트림을 구현한 다양한 클래스 제공

     

     

     

    문자 스트림

     

    유니 코드(2바이트)문자를 입출력 하는 스트림

     문자로 표현되지 않는 데이터는 다루지 못함

     이미지,동영상과 같은 바이너리 데이터는 입출력

     

    문자 스트림을 다루는 클래스

     Reader/Writer

    InputStreamReader/OutputStreamWriter

    FileReader/FileWriter

    BufferedReader/BufferdWriter

     텍스트 파일에서 문자 데이터 입출력

     

     

     

    문자 중심의 입출력 클래스

     

    클래스 Reader와 Writer

     문자 중심의 입출력을 담당하는 추상 클래스

    클래스 Reader의 주요 메소드

    클래스 Writer의 주요 메소드

     

    FileReader을 이용한 파일 일기

     

    문자 스트림의 파일 입력 스트림 생성

     

    파일전체를 읽어 화면에 출력하는 코드 샘플

    Reader fin = new FileReader("c:\\test.txt"
    /* C:\\test.txt 파일을 열고 파일과 입력 바이트 스트림 객체 fin 연결 */
    
    int c;
    
    while((c = fin.read()) != -1) 
    //파일 끝까지 바이트씩 c에 읽어 들임 파일의 끝을 만나면 read()는 -1 리턴
    
    System.out.println((char)c);//바이트 c를 문자로 변환하여 화면에 출력
    }
    
    fin.close(); /*스트림을 닫음. 파일도 닫힘 스트림과 파일의 연결을 끊음
    더이상 스트림으로부터 읽을 수 없음*/

     

     

     

    FileReader로 텍스트 파일 읽기

     

    try/catch구문 사용하여 오류 최소화

    FileReader 코드를 이용하여 텍스트 파일 읽기

     

     

    package project4;
    
    import java.io.*;
    
    
    public class FileReaderEx {
    	public static void main(String[] args) {
    		FileReader fin = null;
    		try {
    			fin = new FileReader("c:\\windows\\system.ini");
    			int c;
    			while((c = fin.read()) != -1) {
    				System.out.print((char)c);
    			}
    			fin.close();
    		}
    		catch(IOException e) {
    			System.out.println("입출력 오류");
    		}
    	}
    }
    

     

     

     

     

     

    FileWriter 사용 예

     

    c:\Temp\test.txt로의 문자출력

    FileWriter fout = new FileWriter("c:\\Temp\\test.txt");

     

    파일 쓰기

    문자 단위 쓰기

    FileWriter fout = new FileWriter("c:\\Temp\\test.txt");
    fout.write('A'); // 문자 'A' 출력
    fout.close();

    블록 단위 쓰기

    char [] buf = new char[1024];
    
    // buf[] 배열의 처음부처 배열 크기(1024개의 문자)만큼 쓰기
    fout.write(buf,0,buf.length);

     

     

    키보드 입력을 파일로 저장하기

     

    package project4;
    
    import java.io.*;
    import java.util.*;
    
    public class FileWriterEx {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		FileWriter fout = null;
    		int c;
    		try {
    			fout = new FileWriter("c:\\test.txt");
    			while(true) {
    				String line = scanner.nextLine();
    				if(line.length() == 0)
    					break;
    				fout.write(line,0,line.length());
    				fout.write("\r\n,0,2");  //한 줄 띄기 위해 \r\n을 파일에 저장
    			} 
    			fout.close();
    		}catch(IOException e) {
    			System.out.println("입출력 오류");
    		}
    		scanner.close();
    	}
    }
    
    반응형

    댓글

Designed by Tistory.