[Java] 자바 파일 입출력 (txt파일로 저장 및 읽어오기)

 File 클래스 

Java.io패키지에서 제공하는 File클래스는 파일 크기, 파일 속성, 파일 이름 등의 정보를 얻어내는 기능과 파일 생성 및 삭제 기능을 제공하고 있습니다. 그리고 디렉토리를 생성하고 디렉토리에 존재하는 파일 리스트를 얻어내는 기능도 있습니다. 이번 포스팅에서는 이 File클래스와 출력스트림을 활용하여 텍스트(txt)파일을 생성해보고 이것을 입력스트림을 활용하여 읽어오는 예제를 한번 만들어보도록 하겠습니다.

 

1. txt 파일로 데이터 저장하기

package InputOutputStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputSTreamEX {
    public static void main(String[] args) {
	    try {
	        OutputStream output = new FileOutputStream("D:/Eclipse/Java/Output.txt");
	        String str ="오늘 날씨는 아주 좋습니다.";
	        byte[] by=str.getBytes();
	        output.write(by);
	    } catch (Exception e) {
           e.getStackTrace();
	    }
    }
}

파일저장

 

2. txt 파일 불러오기

package InputOutputStream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class InputStreamEx {
    public static void main(String[] args) {
        try{
           //파일 객체 생성
           File file = new File("D:/Eclipse/Java/Output.txt");
           
           //입력 스트림 생성
           FileReader file_reader = new FileReader(file);
           int cur = 0;
           while((cur = file_reader.read()) != -1){
              System.out.print((char)cur);
           }
           file_reader.close();
        }catch (FileNotFoundException e) {
           e.getStackTrace();
        }catch(IOException e){
           e.getStackTrace();
        }
    }
}

파일출력

 

 성능 향상을 위한 고민 (Buffer 활용하기) 

프로그램의 성능은 로직에따라서 얼마든지 달라질 수가 있습니다. 아무리 하드웨어가 좋아도 소프트웨어가 구리다면 좋은 성능의 프로그램이 나올 수 없습니다. 소프트웨어에서의 입출력도 마찬가지입니다. 개발자라면 좀 더 효율적으로 입출력을 할 수 있는 방법을 고민해보아야합니다. 속도를 향상 시키는 방법 중 하나로 버퍼를 사용하는 방법이 있을 수 있겠는데요. 예를들어 프로그램은 직접 하드디스크에서 데이터를 가져오지않고 메모리 버퍼로 데이터를 가져오는 방식으로 읽는 속도를 향상 시킬 수 있습니다. 그리고 버퍼는 데이터가 쌓이기를 기다렸다가 꽉차게되면 한번에 읽는 방식으로 입력 횟수를 줄여줍니다.

 

1. BufferedOutputStream을 활용한 txt 파일로 데이터 저장하기

Buffered OutputStream과 BufferedWriter은 프로그램에서 전송한 데이터를 내부 버퍼에 쌓아두었다가 버퍼가 꽉차면, 버퍼의 모든 데이터를 한꺼번에 보냅니다. 프로그램 입장에서 보면 직접 데이터를 보내는것이 아니라, 메모리 버퍼로 데이터를 고속 전송하기 떄문에 실행 성능이 향상되는 효과를 보게됩니다.

고속저장

package InputOutputStream;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputBufferedStreamEX {
    public static void main(String[] args) throws IOException {
	    BufferedOutputStream bs = null;
        try {
            bs = new BufferedOutputStream(new FileOutputStream("D:/Eclipse/Java/Output.txt"));
            String str ="오늘 날씨는 아주 좋습니다.";
            bs.write(str.getBytes()); //Byte형으로만 넣을 수 있음
	    } catch (Exception e) {
            e.getStackTrace();
        // TODO: handle exception
        }finally {
            bs.close();
        } 
    }
}

파일저장

 

2. BufferedInputStream을 활용한 txt 파일 불러오기

BufferedInputStream과 BufferedReader은 입력 소스로부터 자신의 내부 버퍼 크기만큼 데이터를 미리 읽고 버퍼에 저장해둡니다. 프로그램은 외부의 입력 소스로부터 직접 읽는 대신 버퍼로부터 읽음으로써 읽기 성능이 향상되는 효과를 얻을 수 있습니다.

고속출력

package InputOutputStream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class InputStreamEx {
    public static void main(String[] args) throws IOException {
	 try {
	       // 바이트 단위로 파일읽기
	       String filePath = "D:/Eclipse/Java/Output.txt"; // 대상 파일
	       FileInputStream fileStream = null; // 파일 스트림
	        
	       fileStream = new FileInputStream( filePath );// 파일 스트림 생성
	       //버퍼 선언
	       byte[ ] readBuffer = new byte[fileStream.available()];
	       while (fileStream.read( readBuffer ) != -1){}
	       System.out.println(new String(readBuffer)); //출력

	       fileStream.close(); //스트림 닫기
	    } catch (Exception e) {
           e.getStackTrace();
	    }
    }
}

파일출력

댓글

Designed by JB FACTORY