File 클래스
File 클래스란?
File 클래스는 파일이나 디렉터리에 대해, 겅로명, 크기, 타입, 수정 날짜 등의 속성 정보를 재공하고, 파일 삭제, 디렉터리 생성, 파일 이름 변경, 디렉터리 내의 파일 리스트 제공 등 다양한 파일 관리 작업을 지원합니다. File 클래스의 경로명은 java.io.File입니다. 이름과는 달리, File 클래스에는 파일 입출력 기능은 없습니다.
File 객체 생성
File f = new File("c:\\Temp\\test.txt");
File f = new File("c:\\Temp", "test.txt"); // 디렉터리와 파일명을 나누어 전달
| 메소드 | 설명 |
| File(File parent, String child) | parent 디렉터리에 child 이름의 서브 디렉터리나 파일을 나타내는 File 객체 생성 |
| File(String pathname) | pathname의 완전 경로명이 나타내는 File 객체 생성 |
| File(String parent, String child) | parent 디렉토라에 child 이름의 서브 디렉터리나 파일을 나타내는 File 객체 생성 |
| File(URI uri) | fileURI를 추정 경로명으로 변환하여 File 객체 생성 |
File 클래스를 이용한 파일 및 디렉터리 관리
File 클래스의 메소드를 이용하면, 파일 크기와 타입을 알아내고, 파일 삭제, 이름 변경, 디렉터리 생성, 디렉터리의 파일 리스트 얻기 등 다양한 파일 관리 작업을 수행할 수 있습니다.
| 메소드 | 설명 |
| boolean mkdir() | 새로은 디렉터리 생성 |
| String[] list() | 디렉터리 내의 파일과 서브 디렉터리의 리스트를 문자열 배열로 리턴 |
| File [] listFiles() | 디렉터리 내의 파일과 서브 디렉터리의 리스트를 File [] 배열로 리턴 |
| boolean renameTo(File dest) | dest가 지정하는 경로명을으로 파일 이름 변경 |
| boolean delete() | 파일 또는 디렉터리 삭제 |
| long length() | 파일의 크기 리턴 |
| String getPath() | 경로명 전체를 문자열로 변환하여 리턴 |
| String getParent() | 파일이나 디렉터리의 부모 디렉터리 이름 리턴 |
| String getName() | 파일 또는 디렉터리 이름을 문자열로 리턴 |
| boolean isFile() | 일반 파일이면 true 리턴 |
| boolean isDirectory() | 디렉터리이면 변경된 시간 리턴 |
| long lastModified() | 파일이 마지막으로 변경된 시간 리턴 |
| boolean exists() | 파일 또는 디렉터리가 존재하면 true 리턴 |
파일 크기, length()
length()는 파일이나 디렉터리의 크기를 리턴합니다.
File f = new File("c:\\windows\\system.ini"); // 파일 크기는 219 바이트
long size = f.length(); // size = 219
파일이 존재하지 않거나, 디렉터리 혹은 운영체제 종속적인 정치 파일의 경우, length()는 운영체제에 따라 0을 리턴하기도 합니다.
파일의 경로명, getName(), getPath(), getParent()
getName()은 파일명만, getPath()는 완전 경로명을, getParent()는 부모 디렉터리를 문자열로 리턴합니다.
String filename = f.getName(); // "system.ini"
String path = f.getPath(); // "c:\\windows\\system.ini"
String parent = f.fetParent(); // "c:\\windows"
파일 타입 판별, isFile()과 isDirectory()
if (f.isFile()) // 파일인 경우
System.out.println(f.getPath() + "는 파일입니다.");
else if (f.isDirectory()) // 디렉터리인 경우
System.out.println(f.getPath() + "는 디렉터리입니다.");
system.ini는 당연히 파일이므로 아래와 같이 출력됩니다.
c:\windows\system.ini는 파일입니다.
디렉터리에 있는 파일 리스트 얻기, listFiles()
File 객체가 디렉터리의 경로명을 가진 경우, 디렉터리의 모든 파일과 서브디렉터리의 리스트를 얻을 수 있습니다. list()는 파일과 서브디렉터리 경로명을 문자열 배열(String[])로 리턴하는 반면, listFiles()는 파일과 서브디렉터리 경로명을 File[] 배열로 리턴합니다.
File f = new File("c:\\Temp");
File[] subfiles = f.listFiles(); // c:\Temp 디렉터리의 파일 및 서브디렉터리 리스트 찾기
for (int i = 0; i < filenames.length; i++) {
System.out.print(subfiles[i].getName()); // 파일명 출력
System.out.println("\t파일크기: " + subfiles[i].length()); // 파일 크기 출력
}
File 클래스 활용한 파일 관리
import java.io.File;
public class FileEx {
public static void listDirectory(File dir) {
System.out.println("-----" + dir.getPath() + "의 서브 리스트 입니다.-----");
File[] subFiles = dir.listFiles(); // 디렉터리에 포함된 파일과 디렉터리 이름의 리스트 얻기
for (int i = 0; i < subFiles.length; i++) { // subFiles 배열의 각 File에 대해 루프
File f = subFiles[i];
long t = f.lastModified(); // 마지막으로 수정된 시간
System.out.print(f.getName());
System.out.print("\t파일크기: " + f.length()); // 파일 크기
System.out.printf("\t수정한 시간: %tb %td %ta %tT\n", t, t, t, t);
}
}
public static void main(String[] args) {
File f1 = new File("c:\\windows\\system.ini");
System.out.println(f1.getPath() + ", " + f1.getParent() + ", " + f1.getName());
String res = "";
if (f1.isFile()) res = "파일"; // 파일 타입이면
else if (f1.isDirectory()) res = "디렉토리"; // 디렉토리 타입이면
System.out.println(f1.getPath() + "은 " + res + "입니다.");
File f2 = new File("c:\\Temp\\java_sample"); // 새로 만들고자 하는 디렉터리
if (!f2.exists()) { // f2 디렉터리가 존재하는지 검사
f2.mkdir(); // 존재하지 읺으면 디렉터리 생성
}
listDirectory(new File("c:\\Temp")); // c:\Temp에 있는 파일 리스트 출력
f2.renameTo(new File("c:\\Temp\\javasample")); // java_sample -> javasample로 이름 변경
listDirectory(new File("c:\\Temp")); // javasample로 변경한 후 리스트 출력
}
}
실행 결과
c:\windows\system.ini, c:\windows, system.ini
c:\windows\system.ini은 파일입니다.
-----c:\Temp의 서브 리스트 입니다.-----
2022 파일크기: 0 수정한 시간: 1월 21 화 13:08:38
hangul.txt 파일크기: 42 수정한 시간: 4월 20 일 14:59:43
java_sample 파일크기: 0 수정한 시간: 5월 05 월 10:45:52
test.out 파일크기: 6 수정한 시간: 4월 25 금 14:12:42
test.txt 파일크기: 46 수정한 시간: 4월 23 수 13:00:58
test2.txt 파일크기: 5 수정한 시간: 5월 02 금 12:41:12
-----c:\Temp의 서브 리스트 입니다.-----
2022 파일크기: 0 수정한 시간: 1월 21 화 13:08:38
hangul.txt 파일크기: 42 수정한 시간: 4월 20 일 14:59:43
javasample 파일크기: 0 수정한 시간: 5월 05 월 10:45:52
test.out 파일크기: 6 수정한 시간: 4월 25 금 14:12:42
test.txt 파일크기: 46 수정한 시간: 4월 23 수 13:00:58
test2.txt 파일크기: 5 수정한 시간: 5월 02 금 12:41:12
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 자바의 GUI (0) | 2025.05.11 |
|---|---|
| 파일 입출력 응용: 파일 복사 (1) | 2025.05.08 |
| 버퍼 입출력과 파일 입출력 (1) | 2025.05.02 |
| FileInputStream을 이용한 바이너리 파일 읽기 (6) | 2025.04.29 |
| 바이트 스트림 클래스와 FileOutputStream를 이용한 바이너리 파일 쓰기 (1) | 2025.04.25 |