입출력 부분에서 File 객체만들기를 연습해보겠습니다.
1. new File(String 파일 또는 경로)
==> 디렉토리와 디렉토리 사이 또는 디렉토리와 파일명 사이의 구분문자는 슬레쉬('/')를 사용하거나
역슬레쉬('\')를 사용할 수 있다.
File file1 = new File("D:\\highjava\\D_other\\test.txt"); //구분문자는 역슬레쉬('\')를 사용
System.out.println("파일명: " + file1.getName());
System.out.println("파일일까? : " + file1.isFile());
System.out.println("디렉토리일까?" + file1.isDirectory());
System.out.println();
File file2 = new File("D:/highjava/D_other");
System.out.println("파일명: " + file2.getName());
System.out.println("파일일까? " + file2.isFile());
System.out.println("디렉토리일까? " + file2.isDirectory());
System.out.println();
미리 D_other와 test 파일을 만들 놓고 확인해 봅니다.
테스트는 파일이고 D_other는 디렉토리인 것을 알 수 있다.
디렉토리(폴더)를 만들어 보겠습니다.
- mkdir() ==> File객체의 경로 중 마지막 위치의 디렉토리를 만든다.
==> 반환값 : 만들기 성공(true), 만들기 실패(false)
==> 중간 부분의 경로가 모두 만들어져 있어야 마지막 위치의 경로를 만들 수 있다.
- mkdirs() ==> 중간 부분의 경로가 없으면 중간 부분의 경로도 같이 만들어 준다.
두가지의 방법이 있는데
File file5 = new File("D:/highjava/D_other/연습용");
if( !file5.exists()) {
if( file5.mkdir() ) {
System.out.println(file5.getName() + " 만들기 성공 !!!");
}else {
System.out.println(file5.getName() + " 만들기 실패 ~~~");
}
}else {
System.out.println(file5.getName() + " 은 이미 있습니다.");
}
System.out.println();
File file6 = new File("D:/highjava/D_other/test/java/src");
if( ! file6.exists()) {
if(file6.mkdirs()) {
System.out.println(file6.getName() + " 만들기 성공 !!!");
}else {
System.out.println(file6.getName() + " 만들기 실패 ~~~");
}
}else {
System.out.println(file5.getName() + " 은 이미 있습니다.");
}
System.out.println();
mkdirs()는 중간 부분의 경로가 없으면 경로도 같이 만들어 주는 것을 알 수 있습니다.
다음은 크기와 경로를 알아보겠습니다.
File f1 = new File("D:\\highjava\\D_other\\test.txt");
System.out.println(f1.getName() + "의 크기: " + f1.length()+ "bytes");
System.out.println("path : " + f1.getPath());
System.out.println("absolute Path : "+ f1.getAbsolutePath());
System.out.println();
File f2 = new File(".");
System.out.println("path : " + f2.getPath());
System.out.println("absolute Path : "+ 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:\\highjava\\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();
test는 파일이고 .은 디렉토리 이며 sample은 만들어있지 않기 때문에 뭘까요 라고 나오는 것을 알 수 있다.
특정 디렉토리 안의 파일 목록을 출력해보겠습니다.
public class FileTest03 {
public static void main(String[] args) {
FileTest03 test = new FileTest03();
File file = new File("D:\\highjava\\D_other");
test.displayFileList(file);
}
// 디렉토리 정보를 인수값으로 받아서 해당 디렉토리에 있는 모든 파일과 디렉토리 목록을 출력하는 메서드
public void displayFileList(File dir) {
if(!dir.isDirectory()) {
System.out.println("디렉토리(폴더)만 가능합니다.");
return;
}
System.out.println("[" + dir.getAbsolutePath() + "] 디렉토리 내용");
// 해당 디렉토리 안에 있는 모든 파일과 디렉토리 목록을 구한다.
File[] files = dir.listFiles(); // 파일 객체로 가지고 오는 것
// String[] files = dir.list(); //스트링 배열로 가지고 오는 것
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
// 가져온 파일과 디렉토리 목록 개수만큼 반복
for(int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
String attr = ""; // 파일의 속성을 나타낼 변수(읽기, 쓰기, 히든, 디렉토리 구분)
String size = ""; // 파일의 크기가 저장될 변수
if(files[i].isDirectory()) {
attr = "<DIR>";
}else {
size = 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", df.format(new Date(files[i].lastModified())), attr, size, fileName );
}
}
}
SimpleDateFormat 을 이용하여 시간을 계산해줍니다.
해당 예제는 cmd에서 dir을 검색했을때 나오는 결과를 비슷하게 만들어 보았습니다.
이전에 만들었던 내용들이 나오는 것을 알 수 있습니다.
고급 자바_0102-2 (0) | 2023.01.02 |
---|---|
고급 자바_0102_1 (1) | 2023.01.02 |
고급 자바_1227-2 (0) | 2022.12.27 |
고급 자바_1227-1 (2) | 2022.12.27 |
고급자바_1223-1 (0) | 2022.12.23 |