[20220920] Test01_input 파일 입출력

kangsun lee·2022년 9월 20일
0

Java

목록 보기
18/44

📌 input 파일 입출력

콘솔 입출력, 종이에 입출력을 할 수 있는 것처럼 파일에 입출력을 하는 것을 말한다.
File : .txt .pdf .xls .csv .ppt .jpg ~~

  • 자바에서는 '스트림'이라는 일종의 징검다리를 이용하여 파일과 자바 프로그램을 연결할 수 있다.

[ 파일 --- (스트림 연결) --- 자바 프로그램 ]

- 파일의 내용을 읽어올 수 있다.
- 파일에 데이터를 내보낼 수 있다.
- 자바만의 I/O 모델을 기반으로 어떤 형태의 데이터든지 같은 형태로 입출력이 가능하다.


1. txt파일 생성해놓기

oop0920 우클릭 → new → file 클릭
- file name에 확장명 txt로 작성하면 이클립스에서 메모장 파일도 만들 수 있다.

아무 글이나 작성~


입출력 형 2가지

byte형 : 1바이트 할당 (한글 안됨) ✔️
char형 : 2바이트 할당 (메모리가 조금 무거워짐)


byte기반

- 한글이 깨진다.
FileInputStream fis=null;

1) 스트링 변수에 파일 저장

String filename=" ";

String filename="data.txt";
String filename="I:/java202207/workspace/basic01_java/src/oop0920/data.txt";
  • ""에 파일 경로를 작성해야한다.
  • data.txt파일이 oop0920 같은 경로 안에 있기 때문에 하지않아도 되지만 공부를 위해 경로 작성.

* 만약 경로를 잘못작성하거나 파일이 없으면 에러가 난다.
* 그 에러는 <예외처리>로 어떤 에러가 났는지 보여지도록 해야한다.

		FileInputStream fis=null;
		
		try {
			fis=new FileInputStream(filename);
			
			while(true) {
				int data=fis.read(); //1바이트 읽기
				if(data==-1) { //파일의 끝(End Of File)인지?
					break;
				}//if end
//				System.out.println(data);
				System.out.printf("%c", data);
			}//while end
		}catch (Exception e) {
			System.out.println("파일 읽기 실패 : " + e);
		}finally {
			//자원반납
			//정상적으로 나와도 close, 비정상적으로 나와도 close 시켜줘야한다.
			try {
				if(fis!=null) {fis.close();}
			} catch (Exception e2) {}
		}//end

💻 Console
무궁화 꽃이 피었습니다.
Gone With The WInd!!
오필승
코리아
ITWILL 아이티윌 교육센터
02-6255-8002

  • int data=fis.read(); 1바이트씩 읽기

    - 1바이트씩 커서가 순차적으로 읽고 어느순간 맨 마지막까지 읽게된다.

  • if(data==-1) { //파일의 끝(End Of File)인지?
    			break;
    }//if end

    - -1이 반환된다. -1 은 파일의 끝에 도달했다는 의미와 같다.

  • if(fis!=null) {fis.close();}
    - 파일을 열어서 다 읽고 난 후엔 닫아줘야 한다. 요새는 자동으로 닫히도록 설계되어있지만, 안되는 프로그램도 있기 때문에 그냥 무조건 작성해주는 것을 추천한다.

  • 한글이 깨져서 나오는 걸 확인할 수 있다.

byte형 : 1바이트 할당 (한글 안됨)
char형 : 2바이트 할당 (메모리가 조금 무거워짐) ✔️

char기반

- 한글 안 깨짐
FileReader fr=null;

		String filename="I:/java202207/workspace/basic01_java/src/oop0920/data.txt";
		
		FileReader fr=null;
		
		try {
			
			fr=new FileReader(filename);
			
			while(true) {
				int data=fr.read();	//2바이트 읽기
				if(data==-1) {
					break;
				}//if end
				System.out.printf("%c", data);
			}//while end
			
		} catch (Exception e) {
			System.out.println("파일 읽기 실패 : " + e);
		} finally {
			//자원반납
			//정상적으로 나와도 close, 비정상적으로 나와도 close 시켜줘야한다.
			try {
				if(fr!=null) {fr.close();}
			} catch (Exception e2) {}
		}//end 

💻 Console
무궁화 꽃이 피었습니다.
Gone With The WInd!!
오필승
코리아
ITWILL 아이티윌 교육센터
02-6255-8002


메모장 파일의 내용을 엔터 단위로 가져오기

FileReader fr=null;
BufferedReader br=null;

package oop0920;

import java.io.BufferedReader;
import java.io.FileReader;

public class Test03_input {

	public static void main(String[] args) {
		// 3) 메모장 파일의 내용을 엔터 단위로 가져오기
		
		String filename="I:/java202207/workspace/basic01_java/src/oop0919/Order.java";
		
		FileReader fr=null;
		BufferedReader br=null;
		
		try {
			
			//1)파일 가져오기
			fr=new FileReader(filename);
			
			//2)파일 내용 읽기
			int num=0;	//행번호 넣는 변수
			
			br=new BufferedReader(fr); // BufferedReader에 담기
			
			while(true) {
				String line=br.readLine(); //3) 엔터(\n)를 기준으로 한줄씩 가져오기
				if(line==null) { //파일의 끝인지? (EOF)
					break;		 //반복문 빠져나감
				}//if end
				System.out.printf("%d %s\n", ++num, line); //%d ++num 행번호 1씩증가, %s line 문자열 출력, \n 줄바꿈
			
				//문제) 20행마다 밑줄 긋기
				if(num%20==0) {
					System.out.println("------------------------------------------------------------------------------");
				}//if end
				
				
			}//while end
			
			
			
			
		} catch (Exception e) {
			System.out.println("파일 읽기 실패 : " + e);
		} finally {
			//자원반납
			//정상적으로 나와도 close, 비정상적으로 나와도 close 시켜줘야한다.
			try {
				if(br!=null) {br.close();}
			} catch (Exception e) {}
			try {
				if(fr!=null) {fr.close();}
			} catch (Exception e) {}
		}//end 

	} // main() end
	
} // class end

💻 Console

  • 0919 Order.java 파일에 있는 내용이 콘솔에 출력된다.
profile
코딩 공부 💻

0개의 댓글