파일 입출력 D11

최성진·2023년 2월 7일
0

Java

목록 보기
31/32

파일 입출력

1. java.io.File

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

2. 운영체제간의 호환성 유지를 위한 "\"의 사용

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

3. 절대경로

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

4. 상대경로

  • 자업 디렉토리를 기준으로 상대적인 위치를 의미하는 경로
  • 윈도우 예시 : ./conf/httpd.conf ./ 현재 폴더라는 뜻
  • 리눅스 예시 : ../drivers/etc/hosts ../

5. 문자 인코딩(character encoding)

  • 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법
  • UTF-8 : 8비트 이진수로 표현하는 방법

6. 스트림이란?

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

7. 자바의 스트림 관련 클래스

  • 스트림 관련 클래스들은 각각 InputStream(입력/읽기),OutputStream(출력/저장)과 관련된 인터페이스를 상속받기 때문에 모두 동일한 메서드를 가지고 있다.

8. 메서드

  • isFile(); : 파일인지 검사한 후 존재 하지 않거나 파일이 아닌경우 false로 처리
  • isDirectory(); : 디렉토리(폴더)인지 검사한 후 존재 하지 않거나 폴더가 아닌경우 false 처리
  • isHidden(); : 숨김형태인지 검사 후 존재하지 않거나 숨김형태가 아닌경우 false
  • getAbsolutePath(); : 절대경로 값을 추출
  • exists(); : 파일이나 디렉토리가 물리적으로 존재하는지 검사
  • getName() : 마지막 / 이후 단어를 가져옴
  • getParent() : 마지막 / 직전까지 가져옴

9. 파일저장

// 저장할 파일의 경로
final String PATH = "./test.txt";

//파일에 저장할 내용
String write_string = "히히히";

/*
* 문자열을 파일로 저장하기 위해서는 byte 배열로 변환해야한다
* 문자열을 byte배열로 변환하기 위해서 getBytes()
* 메서드를 사용하는데, 이 때 변환과정에서 사용될
* 인코딩 형식을 지정해 주어야 한다.
*/

byte[] buffer = null;
try {
//특정 인코딩 방식 적용
// getBytes()메서드는 존재하지 않는 인코딩 형식에
// 대한 지정을 방지하기 위하여 예외처리를 강제적으로 요구한다.
//byte[] buffer =  buffer = write_string.getBytes("utf-8"); 원래는 이거였는데 수정
	buffer = write_string.getBytes("utf-8");
	} catch (UnsupportedEncodingException e) {
	e.printStackTrace();
	}
// 파일 저장 절차 시작
OutputStream out = null;// finally 블록에서 인식하기 위해서 선언부를 위로 이
	try {
	//OutputStream out = new FileOutputStream(PATH);
	out = new FileOutputStream(PATH);
	// 파일 쓰기
	// 변수의 유효범위가 달라 buffer를 인식하지 못한다.
	out.write(buffer);
	System.out.println("[INFO] 파일 저장 성공 >>" + PATH);
	} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println("[ERROR] 지정된 경로를 찾을 수 없음 >>" + PATH);
	} catch (IOException e) {  
	e.printStackTrace();
	System.out.println("[ERROR] 파일 저장 실패 >> " + PATH);
	}  catch(Exception e) {
	e.printStackTrace();
	System.out.println("[ERROR] 알 수 없는 에러 >> " + PATH);
	}

finally {
	try {
	out.close();
	} catch (IOException e) {
	e.printStackTrace();
	}
}
profile
마부리입니다

0개의 댓글