java.io
패키지에서 제공하는 클래스.- 파일이나 디렉토리 정보를 제공해 주는 역할을 하며, 해당 경로에 접근하고 조작하는 메소드를 제공한다.
File
객체를 사용하기 위해서는 객체화 하여 사용해야 한다.- 여기서 해당 경로가 경로라는 단어 때문에 디렉토리만을 뜻하는 건 줄 알았는데...😶 해당 경로라는 표현은 그 경로가 디렉토리일 수도 있고, 파일일 수도 있다는 의미다.
File
객체를 생성했다고 해서 파일이나 폴더가 생성되는 것은 아니다.
createNewFile()
,mkdir()
,mkdirs()
메소드를 통해 파일이나 폴더를 생성할 수 있다.
File
객체를 생성하는 방법은 대표적으로 세가지가 있다.
✔ D드라이브에 D_Other 폴더와 폴더 내에 test.txt 파일이 존재한다고 가정
💁♀️ 사용할 메소드
String getName()
: 파일명 반환boolean isFile()
: 파일인지의 여부boolean isDirectory()
: 디렉토리인지의 여부
1. new File(String fileName)
// 경로가 파일일 때
File file1 = new File("d:/d_other/test.txt");
String fileName1 = file1.getName(); // test.txt
boolean isFile1 = file1.isFile(); // true
boolean isDirectory1 = file1.isDirectory(); // false
// 경로가 디렉토리일 때
File file2 = new File("d:/d_other");
String fileName2 = file2.getName(); // d_other
boolean isFile2 = file2.isFile(); // false
boolean isDirectory2 = file2.isDirectory(); // true
2. new File(File parent, String child)
File file3 = new File(file2, "test.txt");
System.out.println(file3.getName()); // test.txt
System.out.println(file3.isFile()); // true
System.out.println(file3.isDirectory()); // false
3. new File(String parent, String child)
File file4 = new File("d:/d_other", "test.txt");
System.out.println(file4.getName()); // test.txt
System.out.println(file4.isFile()); // true
System.out.println(file4.isDirectory()); // false
exists()
메소드의 리턴값이false
일 때 파일 또는 디렉토리를 생성할 수 있다.
💁♀️ 사용할 메소드
boolean exists()
: 존재하는지의 여부boolean mkdir()
: 새로운 폴더 생성boolean mkdirs()
: 경로상 없는 모든 폴더 생성
File file5 = new File("d:/d_other/연습용");
System.out.println(file5.getName() + "의 존재 여부: " + file5.exists());
if(!file5.exists()) {
if(file5.mkdir()) {
System.out.println(file5.getName() + " 만들기 성공");
} else {
System.out.println(file5.getName() + " 만들기 실패");
}
}
// -------------------------------------------------------------
File file6 = new File("d:/d_other/test/java/src");
if(!file6.exists()) { // /test/java 중간 경로 없어서 실패 나옴
if(file6.mkdir()) {
System.out.println(file6.getName() + " 만들기 성공");
} else {
System.out.println(file6.getName() + " 만들기 실패");
}
}
// ---------------------------------------------------------------
File file7 = new File("d:/d_other/test/java/src");
if(!file7.exists()) {
if(file7.mkdirs()) {
System.out.println(file7.getName() + " 만들기 성공");
} else {
System.out.println(file7.getName() + " 만들기 실패");
}
}
💁♀️ 사용할 메소드
long length()
: 파일의 크기 반환String getpath()
: 상대 경로 또는 절대 경로 반환String getAbsolutePath()
: 절대 경로 반환
File f1 = new File("d:/d_other/test.txt");
System.out.println(f1.getName() + "의 크기: " + f1.length() + "bytes");
System.out.println("path: " + f1.getPath());
System.out.println("absolutePath: " + f1.getAbsolutePath());
System.out.println();
File f2 = new File("."); // 현재 위치는 .으로 표시
System.out.println("path: " + f2.getPath());
System.out.println("absolutePath: " + f2.getAbsolutePath());
System.out.println();
if(f1.isFile()) {
System.out.println(f1.getName() + "은 파일입니다.");
} else if(f1.isDirectory()) {
System.out.println(f1.getName() + "은 디렉토리입니다.");
} else {
System.out.println(f1.getName() + "은 뭘까용");
}
System.out.println();
if(f2.isFile()) {
System.out.println(f2.getName() + "은 파일입니다.");
} else if(f2.isDirectory()) {
System.out.println(f2.getName() + "은 디렉토리입니다.");
} else {
System.out.println(f2.getName() + "은 뭘까용");
}
System.out.println();
// 지정된 위치에 존재하지 않는 파일을 지정했을 때
File f3 = new File("d:/d_other/sample.exe");
if(f3.isFile()) {
System.out.println(f3.getName() + "은 파일입니다.");
} else if(f3.isDirectory()) {
System.out.println(f3.getName() + "은 디렉토리입니다.");
} else {
System.out.println(f3.getName() + "은 뭘까용");
}
System.out.println();
💁♀️ 사용할 메소드
File[] listFiles()
: 파일 및 디렉토리의 배열 반환boolean canRead()
: 파일이 읽을 수 있는지 여부boolean canWrite()
: 파일에 쓸 수 있는지 여부boolean isHidden()
: 파일이 숨겨져 있는지 여부File lastModified()
: 파일의 마지막 수정 시간을 나타내는File
객체 반환
public class PrintList {
public static void main(String[] args) {
PrintList test = new PrintList();
File file = new File("D:\D_Other"); // 경로 바꿔가며 테스트
test.displayFileList(file);
}
// 디렉토리 매개변수로 받기
void displayFileList(File dir) {
if(!dir.isDirectory()) {
System.out.println("디렉토리(폴더)만 가능합니다.");
return;
}
System.out.println("== [ " + dir.getAbsolutePath() + " ] 디렉토리 내용 ==");
// 디렉토리의 모든 파일과 하위 디렉토리 목록 가져오기
File[] files = dir.listFiles();
// 출력할 날짜 형식 설정
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
// 가져온 목록 개수만큼 반복
for(int i=0; i<files.length; i++) {
String fileName = files[i].getName();
String attr = ""; // 파일 속성 (읽기, 쓰기, 숨김파일, 디렉토리 구분)
String fileSize = ""; // 파일 크기
if(files[i].isDirectory()) {
attr = "<DIR>";
} else {
fileSize = String.valueOf(files[i].length());
attr = files[i].canRead() ? "R" : "";
attr += files[i].canWrite() ? "W" : "";
attr += files[i].isHidden() ? "H" : "";
}
System.out.printf("%s %5s %12s %s\n",
dateFormat.format(new Date(files[i].lastModified())), attr, fileSize, fileName);
}
}
}