자바 파일 관리
- 자바의 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"));