파일과 문자셋

5BRack·2022년 7월 7일

자바란?

목록 보기
39/42

자바 파일 관리

  • 자바의 File 클래스는 파일폴더를 관리하는 클래스이다.

파일 객체 생성

  • File(String pathname) -pathname 위치를 가리키는 파일 객체 생성
  • File(File parent, String child) - parent 폴더에 child 위치를 가리키는 파일 객체 생성
  • File(String parent, String child) -parent 폴더에 child 위치를 가리키는 파일 객체 새생성
  • File(URI uri) - uri 위치를 가리키는 파일 객체 생성

파일 객체 주의 사항

  • 파일 객체를 생성하는 시점에 실제 파일의 유무는 전혀 문제되지 않는다.
  • 파일을 읽어올 때 실제 파일이 존재하지 않으면, FileNotFoundException이 발생한다.
  • File 객체를 생성 후 실제 해당 경로에 파일 존재 여부는 exists()메서드를 이용해 확인할 수 있다.
  • File 클래스의 mkdir()메서드와 createNewFile() 메서드를 이용해 실제 경로 위치에 폴더 및 파일을 직접 생성할 수 있다.
File newFile = new File("C:/temp/newFile.txt);
if(!newFile.exists()) newFile.createNewFile();

파일 경로 표시하기

  • 운영체제별로 파일 구분자가 다르다.
  • 윈도우는 역슬레쉬(), Mac은 슬레쉬(/) 이기 때문에 File클래스의 정적 필드인 separator 를 사용하여 파일 경로를 운영체제 상관없이 저장 시킬 수 있다.

String path = "C:"+File.separator+abc+/File.separator+bcd.txt

파일의 절대 경로 와 상대 경로

  • 파일의 절대 경로 - 파일의 전체 경로
  • 파일의 상대 경로 - 현재 작업폴더를 기준으로 바라보는 경로

File 클래스의 인스턴스 메서드인 getAbosolutePath()는 파일 전체가 가리키는 위치를 절대 경로로 리턴한다.
public String getAbsolutePath();

파일 클래스의 주요 메서드

  • File 객체는 실제 파일뿐 아니라 폴더도 함께 관리하는 클래스 이기 때문에 객체가 가리키는 실체가 파일인지 폴더인지 구분할 필요가 있다.

  • isDirectory() - 폴더 여부를 참 또는 거짓으로 리턴

  • isFile() - 파일 여부를 참 또는 거짓으로 리턴

  • getName() - 파일의 이름을 문자열로 리턴

  • getParent() - 부모 폴더의 이름을 문자열로 리턴

  • list() - 경로 내의 폴더와 파일 이름을 문자열 배열로 리턴

  • listFiles() - 경로 내의 폴더와 파일 이름을 파일 객체 배열로 리턴

  • mkdir() - 해당 경로에 폴더 생성(하위폴더만 가능)

  • mkdirs() - 존재하지 않는 경로상의 모든 폴더를 생성

  • getAbsolutePath() - 파일의 절대 경로를 문자열로 리턴

자바에서 문자셋 이용

  • 문자셋 - 어떤 언어를 표현하는 데 사용하는 문자들의 집합

아스키

  • 아스키는 미국 정보 교환 표준 부호의 약자로, 영문, 알파벳, 숫자, 특수 기호, 제어 코드로 구성된 코드표이다.
  • 아스키 코드만으로는 모든 나라의 문자를 표현할 수 없다. 각 나라는 자신들만의 문자셋을 표준화해 사용해 왔다.
  • 이러한 문제점을 해결하기 위해 사용하는 것이 유니코드 이다.
  • 유니코드는 하나의 문자셋 안에 전 세계 문자를 통합한 문자셋으로, 다국어 문자를 동시에 표현할 수 있다.

문자열 byte 분해 및 조립

  • 문자열 -> byte[] : 문자열.getBytes(문자셋)
  • byte[] -> byte : new String(byte[],문자셋)

Charset 클래스로 문자셋 이용

  • 자바에서는 문자셋 객체의 생성 및 관리를 위해 Charset 클래스를 제공한다.

  • Charset 객체 생성에는 C - harset의 2가지 정적 메서드를 사용할 수 있다.

  • static Charset defaultCharset() - 현재 설정돼 있는 기본값 문자셋 리턴

  • static Charset forName(String charsetName) - 매개변수로 넘어온 CharsetName 문자셋 리턴

   
        Charset cs1 = Charset.defaultCharset();
        Charset cs2 = Charset.forName("UTF-8");
        Charset cs3 = Charset.forName("MS949");

시스템 문자셋 지원 여부

  • 시스템에서 해당 문자셋 지원 여부는 Charset의 정적 메서드인 isSupported()로 확인할 수 있다.
System.out.println(Charset.isSupported("MS949"));

0개의 댓글