I/O Input Ouput 파일 입출력

박성현·2024년 3월 29일

java

목록 보기
44/51

입출력

  • 프로그램에서 다른 대상으로 데이터를 보내거나 읽어들이는 기능
  • java.io 패키지에서 제공
  • 입출력 스트림 - Blue Wate

스트림

  • 애플리케이션이 다른 대상으로 데이터 입/출력시 중간 매개체 역할을 하는 단위
  • 애플리케이션 -> (출력스트림) -> 작업대상(파일, 콘솔, 서버 등) // InputStream
  • 애플리케이션 <- (입력스트림) <- 작업대상(파일, 콘솔, 서버 등) // OutputStream

바이트 기반 입출력 // 영문출력 용이

package iopkg;

import java.io.IOException;

public class InputStreamTest {
	public static void main(String[] args) {
		int var_byte = -1;
		
		System.out.println("문자열 입력 >> ");
		do{
            try{
                var_byte = System.in.read(); // 1byte 씩 읽어온다(한글은 깨짐)
            }
            catch(IOException io){
                io.printStackTrace();
            }
            if(var_byte == 10 || var_byte == 13) {
                break;
            }else {
                System.out.println("읽은 값 : " + (char)var_byte);
            }

        }
		while(true);
		System.out.println("end");
			
	}

}

결과값 :


문자 기반 입출력 // 한글출력 용이

Reader 클래스

  • 문자를 읽는 클래스

bufferedReader 클래스

  • Reader 스트림에 버퍼 기능을 추가하는 스트림 클래스
  • 버퍼를 사용해 성능이 좋음
  • readLine() 메서드 : 라인별로 읽어 들여 String 타입으로 반환
  • InputStreamReader : InputStream 객체를 Reader 객체로 변환
package iopkg;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderTest {
	
	public static void main(String[] args) {
		
		// 파일과 인터페이스의 연결통로
		FileInputStream fIn=null; // file read => byte
		// 바이트형으로 읽은형태를 reader로
		InputStreamReader isr = null; // byre => Reader
		BufferedReader bfr = null; //ReadLine
		
		String fPath = "C:\\kdigital\\javastudy\\data\\bufferReader.txt";
		
		try {
			fIn =new FileInputStream(fPath);
			isr = new InputStreamReader(fIn); 
			bfr = new BufferedReader(isr);
			
			String str = null;
			while(true) {
				str = bfr.readLine();
				if(str == null) break;
				System.out.println(str);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				bfr.close();
				isr.close();
				fIn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
		
	}

}

결과값 :


주소록 파일 정보 출력

package iopkg;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.StringTokenizer;

public class FileReadAddress {

	public static void main(String[] args) {
		FileReader fr = null;
		BufferedReader bfr = null;
		StringTokenizer st = null;
		String fPath = "C:\\kdigital\\javastudy\\data\\address.txt";
		
		try {
			fr = new FileReader(fPath);
			bfr = new BufferedReader(fr);
			String str = null;
			
//			while((str = bfr.readLine())!= null) {
//				// ,로 구분해서 토큰을 만들어줌
//				st = new StringTokenizer(str,",");
//				String tp = "Name : %s, Addr : %s, Email : %s, Tel : %s \n";
//				// 첫번째문장을 구분하여 nextToken으로 받아올 수 있음
//				System.out.printf(tp, st.nextToken(), st.nextToken(),st.nextToken(),st.nextToken());
//			}
			while((str = bfr.readLine())!= null) {
				// ,로 구분해서 토큰을 만들어줌
				String sArr[] = str.split(",");
				String tp = "Name : %s, Addr : %s, Email : %s, Tel : %s \n";
				// 첫번째문장을 구분하여 nextToken으로 받아올 수 있음
				System.out.printf(tp, sArr[0], sArr[1],sArr[2],sArr[3]);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				bfr.close();
				fr.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}

}

결과값 :


Writer

  • 문자단위로 데이터 출력
package iopkg;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {

	public static void main(String[] args) {
		FileWriter fw = null;
		
		String msg = "Hello World 안녕 세상아~~";
		String fPath = "C:\\kdigital\\javastudy\\data\\address.txt";
		
		// 통로
		try {
			fw= new FileWriter(fPath);
			fw.write(msg);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fw.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		System.out.println("완료");
	}

}

결과값 :


BufferedWriter

  • flush 해야 데이터 출력
  • buffer 사이즈 보다 데이터 출력이 많아 지면 자동 flush
  • close() 메서드 호출 시도 자동 출력
package iopkg;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterTest {

	public static void main(String[] args) {
		FileWriter fw = null;
		BufferedWriter bw= null;
		
		String fPath = "C:\\kdigital\\javastudy\\data\\address.txt";
		
		// 통로
		try {
			fw= new FileWriter(fPath);
			bw = new BufferedWriter(fw,4);
			bw.write('A');
			bw.write('B');
			bw.write('C');
			// 줄나눔
			bw.newLine();
			bw.write('E');
			bw.write('F');
			bw.write('G');
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				bw.close();
				fw.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		System.out.println("완료");
	}

}

결과값 :


profile
개발기록장

0개의 댓글