이전글
java.io.File 클래스
이전글에서 설명했지만 File 클래스는 여러 시스템 환경에서의 파일 개념을 추상화 한 클래스로서 자바 개발시 시스템의 파일의 정보를 다룰 수 있는 클래스입니다. 파일의 정보를 다룬다고 했는데, 파일의 내용을 읽거나 수정하기 위해서는 FileInputStream 또는 FileOutputStream 등 파일 입출력을 통해서만 가능하며, File 클래스로는 파일 생성 및 제거 파일 생성일, 수정일, 권한 등의 정보를 다룰 수 있습니다.
또한 자바에서의 File은 바이너리파일, 텍스트 파일 뿐만 아니라 디렉터리 또한 하나의 파일(다른 파일 list를 가진)로 취급합니다. 따라서 File 클래스를 통해서는 시스템상의 디렉터리 및 파일 모두 조작할 수 있습니다.
생성자
이전글에서 한 번 다루었지만 간략하게 생성자는 다음과 같이 네 가지로 오버로딩 되어있습니다. File 클래스에서 경로를 문자열로 다룰 때에는 경로 ASCII 코드만 사용해야 합니다. 즉 ASCII 코드에 존재하지 않는 특수 문자등이 경로에 필요한 경우에는 \(역슬래시)를 사용하여 이스케이프 처리해주어야 합니다. ex)Tab -> \t
생성자 |
설명 |
new File(String path) |
주어진 문자열 경로를 갖는 File 객체를 생성합니다. 절대 경로 또는 현재 프로그램이 실행되는 위치를 기준으로 하는 상대경로로 지정 가능합니다. |
new File(File parent, String child) |
미리 생성된 File 객체를 부모로 하는 파일(파일명)을 두번째 문자열 매개변수로 지정하여 File 객체를 생성합니다. |
new File(String parent, String child) |
부모 파일의 경로와, 그 하위의 파일명을 각각 매개변수로 지정하여 해당 경로를 조합하여 그 위치에 대한 File 객체를 생성합니다. |
new File(URI uri) |
파일 경로를 객체로 생성한 URI 객체를 기준으로 File 객체를 생성합니다.
URI 클래스는 경로를 관리하기 위한 클래스이고, 이를 이용하여 File 객체를 생성하는 것입니다. |
경로 구분자(separator) 관련 변수
File 클래스에는 경로 구분자(separator) 관련 클래스 변수가 있습니다. 구분자는 경로에서 파일 및 디렉터리를 단계별로 구분하기 위해 사용되는 문자입니다. 예를 들러 Windows에서는 C:\test\test2\test.txt 경로에서 \(역슬래시)가 구분자이며, Linux 및 Unix 시스템에서는 /home/myuser/test.txt 와 같이 /(슬래시) 가 구분자로 사용됩니다.
이처럼 시스템마다 구분자가 다르기 때문에 현재 실행되는 운영체제에 맞는 구분자를 갖는 클래스 변수를 제공하고 있습니다. 자바는 JVM을 통해 어떤 운영체제에서도 한번 작성한 프로그램을 실행시킬 수 있기때문에 프로그램 개발시 이러한 변수를 이용하여 개발하는 것이 특정 시스템에 종속되지 않는 좋은 방법입니다.
JVM은 현재 운영체제를 판단하여 프로그램이 실행되면 해당 변수에 알맞는 값을 설정합니다.
변수명 |
설명 |
public static final String pathSeparator |
시스템에서 path를 구분할 때 사용하는 구분자 입니다. Windows는 ';' Unix는 ':' |
public static final String pathSeparatorChar |
시스템에서 path를 구분할 때 사용하는 구분자(char) 입니다. Windows는 ';' Unix는 ':' |
public static final String separator |
시스템에서 자원의 경로를 구분하기 위해 사용되는 구분자입니다. Windows는 '\' 유닉스는 '/' |
public static final String separatorChar |
시스템에서 자원의 경로를 구분하기 위해 사용되는 구분자(char)입니다. Windows는 '\' 유닉스는 '/' |
파일 경로 관련 메서드
절대 경로와 정규 경로가 있는데, 둘 다 루트 경로에서부터 시작하지만 절대경로의 경우 현재 디렉터리를 뜻하는 . 문자와 같은 기호나 링크를 포함하며, 정규 경로는 이러한 문자를 포함하지 않습니다.
메서드 |
리턴 타입 |
설명 |
getPath() |
String |
파일의 전체 경로를 리턴합니다. |
getAbsoluteFile() |
File |
절대 경로명을 File 객체로 리턴합니다. (File 객체를 생성할때 현재 실행하는 프로그램을 기준으로 상대경로로 지정할 수 있음) |
getAbsolutePath() |
String |
절대 경로명을 String으로 리턴합니다. |
getCanonicalFile() throws IOException |
String |
정규 경로명을 파일 객체로 리턴합니다. (File 객체를 생성할때 현재 실행하는 프로그램을 기준으로 상대경로로 지정할 수 있음) |
getCanonicalPath() throws IOException |
String |
정규 경로명을 String으로 리턴합니다. |
list() |
String[] |
디렉터리에 포함된 파일 및 서브디렉터리 목록을 String 배열로 리턴합니다. |
list(FilenameFilter filter) |
String[] |
디렉터리에 포함된 파일 및 서브디렉터리 목록을 FilenameFilter를 사용하여 조건에 맞는 목록만 String 배열로 리턴합니다. |
listFiles() |
File[] |
디렉터리에 포함된 파일 및 서브디렉터리 목록을 File 객체 배열로 리턴합니다. |
listFiles(FilenameFilter filter) |
File[] |
디렉터리에 포함된 파일 및 서브디렉터리 목록을 FilenameFilter를 사용하여 조건에 맞는 목록만 File 객체 배열로 리턴합니다. |
listFiles(FileFilter filter) |
File[] |
디렉터리에 포함된 파일 및 서브디렉터리 목록을 FileFilter를 사용하여 조건에 맞는 목록만 File 객체 배열로 리턴합니다. |
public static listRoot() |
File[] |
ROOT 디렉터리를 의미하는 File객체들을 배열로 리턴합니다. (예: C:\, D:\ ..) |
exist() |
boolean |
현재 File 객체에 할당된 경로에 파일 및 디렉터리가 실제로 존재하는지 여부를 리턴합니다. |
compareTo(File target) |
int |
대상 File 객체와 경로를 비교합니다. 경로가 같으면 0 음수이면 자신이 대상보다 문자코드상 뒤이며, 양수면 자신이 대상 객체보다 앞입니다. |
toURI() |
URI |
File 객체를 URI 객체로 변환해서 리턴합니다. |
toPath() |
Path |
File 객체를 Path 객체로 변환해서 리턴합니다. |
참고
System.getProperty("user.dir") //현재 실행중인 프로그램의 디렉터리 경로
System.getProperty("sun.boot.class.path") //시스템 속성으로 기본적으로 지정된 CLASSPATH
System.getProperty("java.io.tmpdir") //시스템 속성으로 임시 디렉터리 경로
파일 생성 및 삭제 메서드
메서드 |
리턴 타입 |
설명 |
createNewFile() | boolean |
새로운 파일을 생성합니다. 경로에 이미 파일이 존재하는 경우 생성되지 않으며, 비어 있는 파일이 생성됩니다. |
static File createTempFile(String prefix, String suffix) |
File |
임시파일을 OS의 임시(temp) 디렉터리에 생성합니다. 임시파일의 파일명에 들어갈 접두사와 접미사를 prefix와 suffix로 넘깁니다. 접두사와 접미사를 제외한 파일명은 시스템에 따라 랜덤하게 생성됩니다.
임시 디렉터리 경로는 System.getProperty("java.io.tmpdir") 를 통해 얻을 수 있습니다. |
static File createTempFile(String prefix, String suffix, File dir) |
File |
임시파일을 OS의 임시(temp) 디렉터리에 생성합니다. 임시파일의 파일명에 들어갈 접두사와 접미사를 prefix와 suffix로 넘깁니다. 접두사와 접미사를 제외한 파일명은 시스템에 따라 랜덤하게 생성됩니다.
세번째 확장자로는 임시파일을 생성할 디렉터리 File 객체를 넘깁니다. |
mkdir() |
boolean |
경로에 새로운 디렉터리를 생성합니다. |
mkdirs() |
boolean |
지정된 경로상에 있는 모든 디렉터리를 생성합니다.
C:\test1\test2\ 에서 test1 디렉터리가 존재하지 않는경우 test2 디렉터리 및 test1 디렉터리까지 생성합니다. |
delete(0 |
boolean |
파일 또는 디렉터리를 삭제합니다. |
deleteOnExit() |
boolean |
JVM이 종료되는 시점에 파일 또는 디렉터리를 삭제합니다. |
renameTo(File dest) |
boolean |
지정된 File 객체로 이름을 변경합니다. |
File 권한 관련 메서드
유닉스/리눅스 계열의 운영체제에는 파일의 소유권 및 허가권 개념이 존재합니다. 파일의 소유자 또는 소유 그룹에 대해 실행, 읽기, 수정 권한을 따로 갖습니다. File 클래스의 can 으로 시작하는 메서드는 이러한 권한이 있는지 검사하는 메서드이며, set으로 권한을 설정하는 메서드가 있는데, Windows 환경에서는 권한 설정과 관련된 메서드는 동작하지 않을 수 있습니다.
메서드 |
리턴 타입 |
설명 |
canExecute() |
boolean |
실행 권한이 있는지 리턴합니다. |
canRead() |
boolean |
읽기 권한이 있는지 리턴합니다. |
canWrite() |
boolean |
수정 및 쓰기 권한이 있는지의 여부를 리턴합니다. |
setExecutable(boolean excutable) |
boolean |
파일에 실행 가능 권한을 설정합니다. |
setExecutable(boolean excutable, boolean ownerOnly) |
boolean |
파일에 실행 가능 권한을 설정합니다. ownerOnly가 true인 경우 파일 소유자만 실행할 수 있습니다. |
setReadable(boolean readable) |
boolean |
파일에 읽기 가능 권한을 설정합니다. |
setReadable(boolean readable, boolean ownerOnly) |
boolean |
파일에 읽기 가능 권한을 설정합니다. ownerOnly가 true인 경우 파일 소유자만 읽기 가능합니다. |
setWritable(boolean writable) |
boolean |
파일에 쓰기 가능 권한을 설정합니다. |
setWritable(boolean writable, boolean ownerOnly) |
boolean |
파일에 쓰기 가능 권한을 설정합니다. ownerOnly가 true인 경우 파일 소유자만 쓰기 가능합니다. |
File 정보 관련 메서드
File의 경로, 크기, 수정일 등의 정보를 얻을 수 있는 메서드입니다.
메서드 |
리턴 타입 |
설명 |
getName() |
String |
상위 경로를 제외한 파일명 또는 디렉터리명을 리턴합니다. |
getPath() |
String |
파일의 전체 경로를 리턴합니다. |
getParent() |
String |
부모(상위) 디렉터리 경로를 리턴합니다. |
getParentFile() |
File |
부모(상위) 디렉터리에 대한 File 객체를 생성하여 리턴합니다. |
getTotalSpace() |
long |
File이 속한 파티션의 총 용량을 byte 단위로 구합니다. |
getFreeSpace() |
long |
File이 속한 파티션의 사용 가능 용량을 byte 단위로 구합니다. |
getUsableSpace() |
long |
getFreeSpace() 와 비슷하지만 JVM이 사용 가능한 용량을 byte 단위로 구합니다. |
isAbsolute() |
boolean |
현재 File이 전대 경로명으로 지정된 File 객체인지 여부를 리턴합니다. |
isDirectory() |
boolean |
현재 File이 디렉터리인지 리턴합니다. |
isFile |
boolean |
현재 File이 파일인지 리턴합니다. |
isHidden() |
boolean |
현재 File이 숨김 파일인지 리턴합니다. |
lastModified() |
long |
마지막 수정 날짜 및 시간을 UNIX 시간으로 리턴합니다. |
length() |
long |
파일의 크기를 byte 단위로 리턴합니다. |
다음글