입출력

kailyn·2024년 9월 6일

JAVA

목록 보기
13/17

1. 입출력 개요

1. 입출력 정의 및 사용 이유

1-1. 입출력(IO)이란?

💡 Input과 Output의 약자로 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 연동을 위한 자바 라이브러리이다.
단방향 데이터 송수신을 위해 스트림을 활용하여 데이터를 서로 주고 받게 된다.

1-2. 스트림(Stream)이란?

💡 입출력 장치에서 데이터를 읽고 쓰기 위한 단방향 통로로 자바에서 제공하는 클래스이다.
각각의 장치마다 연결할 수 있는 스트림이 존재하며 바이트 단위 처리와 문자 단위 처리를 위한 스트림 등이 존재한다.
스트림은 기본적으로 1바이트 단위의 데이터만 지나가게 되고 주고 받는 데이터의 기본 단위가 1바이트 이므로 한 방향만 처리가 가능하여 입력 스트림과 출력 스트림을 따로 구성해야 한다.

  • 영어, 숫자, 특수기호들은 한 글자가 1바이트 지만 한글과 같은 많은 언어들은 한 글자를 1바이트로 표현하기 힘들기 때문에 2바이트 또는 3바이트로 표현하게 된다. 앞서 배운 인코딩 방식에 따라 정해지는데 해당 인코딩 방식에 맞춰서 2바이트 또는 3바이트 단위를 구분하여 입출력을 하기 위해서는 문자 단위를 처리할 수 있는 스트림을 활용해야 한다.

1-3. 입출력을 사용하는 이유

💡 입출력을 사용함으로써 사용자로 부터 입력을 받거나 화면이나 스피커로 출력해 줄 수 있다. 또한 파일 형태로 프로그램의 종료 여부와 상관없이 영구적으로 데이터를 저장할 수도 있다.


2. 파일 관련 입출력

1. 파일 클래스(File Class)란?

💡 파일 시스템의 **파일을 다루기 위한 클래스**이다. 파일의 크기나 속성, 이름 등의 정보를 확인할 수 있고 파일 생성 및 삭제 기능 등을 제공한다.
File file = new File("file path");
File file = new File("C:/data/fileTest.txt");
  • 파일/디렉토리 생성 및 삭제 메소드
리턴 타입메소드설명
booleancreateNewFile()새로운 파일 생성
booleanmkdir()새로운 디렉토리 생성
booleanmkdirs()경로 상에 없는 모든 디렉토리 생성
booleandelete()파일 또는 디렉토리 삭제
  • File Class와 파일/디렉토리 생성 및 삭제 이용한 코드
    import java.io.File;
    import java.io.IOException;
    
    public class Application {
        public static void main(String[] args) {
    
            /* 수업목표. File 클래스의 사용 용법을 이해할 수 있다. */
            File file = new File("src/main/java/com/ohgiraffers/section01/file/test.txt");
    
            try {
    
                /* 설명. 생성 될 때 인지한 파일의 경로 및 파일명을 바탕으로 파일을 생성 후 성공 여부를 반환한다. */
                boolean isSuccess = file.createNewFile();
                System.out.println("파일 생성 여부: " + isSuccess);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
    
            /* 설명. 몇 가지 File에서 제공하는 메소드 확인 */
            System.out.println("파일의 크기: " + file.length() + "byte");
            System.out.println("파일의 경로: " + file.getPath());
            System.out.println("현재 파일의 상위 경로: " + file.getParent());
            System.out.println("파일의 절대 경로: " + file.getAbsolutePath());
    
            boolean isDeleted = file.delete();
            System.out.println("파일 삭제 여부: " + isDeleted);
        }
    }
  • 파일/디렉토리 생성 및 삭제 메소드
리턴 타입메소드설명
booleancanExecute()실행할 수 있는 파일인지 여부
booleancanRead()읽을 수 있는 파일인지 여부
booleancanWrite()수정 및 저장할 수 있는 파일인지 여부
StringgetName()파일 이름 리턴
StringgetParent()부모 디렉토리 리턴
FilegetParentFile()부모 디렉토리를 File객체로 생성 후 리턴
StringgetPath()전체 경로 리턴
booleanisDirectory()디렉토리인지 여부
booleanisFile()파일인지 여부
booleanisHidden()숨김 파일인지 여부
longlastModified()마지막 수정 날짜 및 시간 리턴
longlength()파일 크기 리턴

2. 파일 입출력 관련 기반 스트림의 종류

  • 바이트 단위(영어, 숫자, 특수기호 사용 시)

    • InputStream

    • OutputStream

  • 문자 단위(한글까지 사용 시)

    • Reader

    • Writer

3. 파일 입출력 관련 보조 스트림의 종류

💡 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용한다.
보조 스트림만으로는 데이터를 주고 받는 대상에 대한 처리를 하는 것이 아니므로 입출력 처리가 불가능 하고 기반 스트림에 추가로 적용되어야 한다.

  • 보조 스트림의 종류
    1. 입출력 성능 향상
      BufferedInputStream/BufferedOutputStream
      - 입출력 속도 향상 및 한 줄씩 출력 및 입력 관련 메소드 제공 보조 스트림

    2. 형변환 보조스트림

      InputStreamReader/OutputStreamWriter

      • 인코딩 방식을 고려한 한글 깨짐 방지를 위해 고려할 수 있는 보조 스트림
    3. 기본 자료형 데이터 입출력

      DataInputStream/DataOutputStream

    • 기본자료형 및 문자열 관련 타입에 따른 메소드를 제공하는 보조 스트림
    1. 객체 자료형 데이터 입출력
      ObjectInputStream/ObjectOutputStream
      - 객체 단위 입출력을 위한 보조 스트림

profile
나는 할 수 있다...!

0개의 댓글