프로그래밍

[자바 기초] day14 : 파일입출력 본문

자바/자바 기초

[자바 기초] day14 : 파일입출력

시케 2023. 5. 22. 14:22
728x90
반응형

2023.05.22.화

파일입출력

파일입출력은 말그대로 파일을 생성하여 읽고 작성하는 등의 작업을 말한다

 

1. 파일 생성하기

File file = new File(파일경로);
file.createNewFile();

파일에게는 기본생성자가 없으므로 String, URL, 파일객체등을 인자로 작성해주어야 한다
해당 파일이 존재하지 않으면 생성한다

2. 파일 읽어오기

FileInputStream fis = new FileInputStream(file);
int data;
while((data=fis.read())!=-1) { // 읽어 온 데이터가 -1일시 파일 끝(EOF)
	System.out.print((char)data);
}

자바에서는 파일 끝(EOF)을 -1로 치환하여 가져오기 때문에 -1을 읽어올때까지 파일을 읽어온다

(char)data를 하는 이유는 파일을 char(문자) 자료형이 아닌 int(정수) 자료형으로 읽어오기 때문이다.

 

 

3. 파일 작성하기

FileOutputStream fos = new FileOutputStream("D:\\JHyun\\resource\\test.txt",true);
fos.write(65); // 아스키 코드 'A'
fos.write(97);

해당 파일이 존재하지 않으면 생성하며
파일이 존재하면 덮어쓴다

덮어쓰는 것이 아닌 이어쓰는 것을 원한다면 true 인자를 추가로 작성하면 된다

 

4. 파일 스트림 닫기

fos.flush();
fos.close();

마지막으로

OS와 소통하던 통로를 직접 닫아주지 않으면 다음 수행시 문제가 생길 수 있기 때문에 닫아준다

 

파일 스트림 사용시 try catch 구문을 사용하지 않으면 에러가 발생하여 실행할 수 없는데

이는 자바가 외부요인으로 인해 에러가 발생할 가능성을 시사하고 있기 때문이다

try catch 구문으로 예외처리를 하면 된다

(주로 파일 찾을 수없음, 외부요인으로 인한 에러)

 

예제)

package class04;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test03 {
   
   public static void main(String[] args) {

      // "유지보수 용이"
      final String path_START="D:\\KIM\\resource\\";
      final String path_FILE01="test01";
      final String path_FILE02="test02";
      final String path_END=".txt";

      try {
         FileInputStream fis=new FileInputStream(path_START+path_FILE01+path_END);

         int data;
         String num="";
         while( (data=fis.read()) != -1 ) {
            num+=(char)data;
         }
         System.out.println(num);
         data=Integer.parseInt(num);
         System.out.println(data);
         if(data%2==0) {
            System.out.println("짝수");
         }
         else {
            System.out.println("홀수");
         }
      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         System.out.println("fis객체로 파일 읽어오기 작업 완료!");
      }

      
      try {
         FileOutputStream fos=new FileOutputStream(path_START+path_FILE02+path_END);

         for(int i=97;i<=122;i++) {
            fos.write(i);
         }

         fos.flush();
         fos.close();
      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } finally {
         System.out.println("fos객체로 파일 작성하기 작업 완료!");
      }
   }

}
728x90
반응형
Comments