File Class

devlsn96·2024년 7월 31일
0

java 언어 개념정리

목록 보기
24/27

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. 경로 설정하기

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

    절대경로와 상대경로

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

예제) "scr/file/Main01.java"에 대한 정보를 알아보기 위한 방법1

  • file객체 생성 File file = new File("scr/file/Main01.java");
  • .isFile();로 전달된 경로가 파일인지를 검사
    (존재하지 않은 파일로 검사할 경우 무조건 false로 판단)
  • .isDirectory();로 전달된 경로가 디렉토리인지 검사
  • .isHidden();로 전달된 경로가 숨긴형태인지 검사
  • .getAbsolutePath();로 절대경로 값을 추출
  • .exists();로 생성자에 전달된 파일이나 디렉토리가 물리적으로 존재하는지를 검사
  • .mkdirs();로 경로에 따른 디렉토리 생성
  • .getName()로 마지막 "/" 이후 단어를 리턴
  • .getParent()로 처음부터 마지막 "/" 직전까지 리턴

문자 인코딩(character encoding)이란?

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

스트림이란?

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

자바 스트림 관련 클래스

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

3. 파일 저장

주의할 점

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

예제) 파일 저장해보기

  • 저장할 파일의 경로를 생성해주고,
    final String PATH = "./text.txt";
  • 파일에 저장할 내용을 할당받아온다.
    String write_string = "가나다라마바사abcdefg";
  • getBytes()를 이용하여 특정 인코딩 방식 적용해본다.
    • getBytes()는 존재하지 않는 인코딩 형식에 대한 지정을 방지하기 위하여 예외처리를 강제적으로 요구하기 때문에 변수의 유효성 범위에 대한 이슈가 생김
// 파일 저장 절차 시작
try {
	buffer = write_string.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
	e.printStackTrace();
}
  • 파일 저장 절차 시작 (OutputStream클래스 사용)
try {
	out = new FileOutputStream(PATH);
	// 파일 쓰기
	out.write(buffer);
	System.out.println("[INFO]파일 저장 성공 >> " + PATH);
} catch (FileNotFoundException e) {
	System.out.println("[ERROR]지정된 경로를 찾을 수 없음 >> " + PATH);
	e.printStackTrace();
} catch (IOException e) {
	System.out.println("[ERROR]파일 저장 실패 >> " + PATH);
	e.printStackTrace();
} catch (Exception e) {
	System.out.println("[ERROR]알 수 없는 에러 >> " + PATH);
	e.printStackTrace();
} finally { 
	try {
		out.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

4. 파일 읽기

InputStream 인터페이스를 활용해 파일을 읽어 올수 있다.

예제) 파일읽어보기

  • 읽을 파일의 경로를 선언해준다.
    final String PATH = "./text.txt";
  • 파일읽기 (InputStream을 사용)
try {
	in = new FileInputStream(PATH);
	// 읽은 내용을 담기 위한 배열은 파일의 용량만큼 사이즈를 할당한다.
	data = new byte[in.available()];
	// 파일 읽기 - 파라미터로 전달된 배열 안에, 파일의 내용을 담아준다.
	in.read(data);
	System.out.println("[INFO] 파일 읽기 성공 >> " + PATH);
} catch (FileNotFoundException e) {
	System.out.println("[ERROR] 지정된 경로를 찾을 수 없음 >> " + PATH);
	e.printStackTrace();
} catch (IOException e) {
	System.out.println("[ERROR] 파일 읽기 실패 >> " + PATH);
	e.printStackTrace();
} catch (Exception e) {
	System.out.println("[ERROR] 알 수 없는 에러 >> " + PATH);
	e.printStackTrace();
} finally {
	try {
		in.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
  • data 배열에 내용이 있다면, 문자열로 변환하여 출력
if (data != null) {
	try {
			new String(data, "utf-8");
	} catch (UnsupportedEncodingException e) {
			System.out.println("[ERROR] 인코딩 지정 에러");
			e.printStackTrace();
	}
}
profile
Quantum Jump to class for java….

0개의 댓글