[JAVA] 파일 입출력

형이·2023년 9월 5일
0

JAVA

목록 보기
18/19
post-thumbnail

📝 JAVA

🖥️ 1. 파일 입출력

1-1. java.io.File

  • File 클래스는 파일 또는 폴더에 대한 정보를 제공하는 클래스이다.
  • File 클래스의 객체는 정보를 조회하고자 하는 파일이나 폴더의 경로에 대한 문자열을 생성자 파라미터로 전달하는 형태로 만들 수 있다.
  • 이때 파라미터로 전달되는 경로가 실제로 존재하지 않더라도 File 객체의 생성이 가능하다.

1-2. File 객체의 생성 예시

  File file = new File("C:/photo/food.jpg");
		
  File file = new File("C:/photo", "food.jpg");

1-3. 경로 설정하기

  • 운영체제 간의 호환성 유지를 위한 "/"의 사용
  • 경로 문자열을 설정할 때 윈도우 기반에서는 역슬래시(\)를 사용하지만, 이 경우 이스케이프 문자를 사용하여 \\의 형식으로 사용해야하고 운영체제 호환성을 위해 가급적(/)를 사용하는 것이 좋다.

 📌 윈도우에서만 사용할 것이라면 \를 사용하는게 문제가 되지 않지만 그렇지 않은 경우가 더 많기 때문에 가급적 '/'를 사용할 것을 추천!

  • 절대 경로

    	  ✔️ 작업 디렉토리와 관계없이 절대적인 위치를 의미하는 경로
    	     - 윈도우 : C:/Windows/System32/drivers/etc/hosts
    	     - 리눅스 : /etc/httpd/conf/httpd.conf
  • 상대 경로

    	  ✔️ 작업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로
    	     - 윈도우 : ../drivers/etc/hosts(ex.mde)
    		           ./drivers/etc/hosts(ex.System32)
    	     - 리눅스  : ./conf/httpd.conf

🖥️ 2. 문자 인코딩

  • character encoding
  • 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법
  • UTF-8 : 8비트 이진수로 표현하는 방법
  • 아스키 (ASCII) : 라틴 알파벳, 숫자, 특수문자 등을 정수와 그에 대응하는 7비트 이진수로 표현

2-1. 스트림이란

  • 입출력에서 stream이란 디바이스의 입출력 방식이 character 단위이든 block 단위이든 관계없이 "1바이트"씩 "연속"적으로 전달되는 형태로, 추상화된 상태를 의미한다.
  • 입출력 장치는 개별적인 특성이 있으므로 읽고 쓰는 단위가 각각 다르지만, 스트림은 이러한 일련의 과정을 추상화하여 모든 디바이스를 character 단위로만 사용하고 있다.
  • 즉, 입출력 디바이스의 특성을 무시하고 하나의 단일한 입출력 인터페이스로 다룰 수 있도록 하는 것이 stream이다.

2-2. 자바 스트림 관련 클래스

  • 스트림 관련 클래스들은 각각 InputStream(입력/읽기), OutputStream(출력/저장)과 관련된 인터페이스를 상속 받기 때문에 모두 동일한 메서드를 가지고 있다.
  • 프로그래머는 상황에 따라 적절한 클래스를 사용하기만 하면 동일한 방법으로 스트림을 사용할 수 있다.

2-3. 파일 저장 과정

  • 저장을 위한 빈 파일을 생성하기

    	OutputStream의 객체를 생성한다.
  • 파일에 내용 쓰기

    	저장할 내용을 byte 배열로 변환한다.
    	변환된 배열을 OutputStream의 write() 메서드에게 파라미터로 전달한다.
  • 파일 닫기

    	OutputStream 객체로 close() 메서드를 호출하여 스트림을 닫는다.
  • 유의사항

    	OutputStream은 각각의 단계마다 예외처리를 강제적으로 요구한다.
    	try ~ catch 블록이 형성되는 과정에서 변수의 유효성 범위에 대한 처리에 유의해야 한다.

2-4. 파일 읽기 과정

  • 파일을 읽기 위한 InputStream 객체 생성하기
  • 읽은 내용을 담기 위한 빈 byte 배열 생성하기

    	파일의 용량 크기 만큼 배열의 사이즈를 지정해야 한다.
  • 파일의 내용 읽기

    	읽은 내용을 담기 위한 byte 배열을 InputStream 객체의 read() 메서드에게 파라미터로 전달한다.
  • 사용이 완료된 스트림 닫기

    	InputStream 객체의 cload() 메서드를 호출하여 스트림을 닫는다.
  • 읽은 내용을 문자열로 변환하기

    	byte 배열을 String 클래스의 생성자에게 전달하여 문자열로 변환하기
    	이 과정에서 어떤 인코딩을 사용할지를 함께 설정해야 한다.

🔍 './'는 현재 위치를 뜻함 (입력하지 않고 생략 가능)

0개의 댓글