File

dev_hnbm·2023년 11월 6일
0

대덕인재개발원

목록 보기
13/30

📄 File

  • java.io 패키지에서 제공하는 클래스.
  • 파일이나 디렉토리 정보를 제공해 주는 역할을 하며, 해당 경로에 접근하고 조작하는 메소드를 제공한다.
  • File 객체를 사용하기 위해서는 객체화 하여 사용해야 한다.
  • 여기서 해당 경로경로라는 단어 때문에 디렉토리만을 뜻하는 건 줄 알았는데...😶 해당 경로라는 표현은 그 경로가 디렉토리일 수도 있고, 파일일 수도 있다는 의미다.
  • File 객체를 생성했다고 해서 파일이나 폴더가 생성되는 것은 아니다.
    • createNewFile(), mkdir(), mkdirs() 메소드를 통해 파일이나 폴더를 생성할 수 있다.

File 객체 생성하기

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);
    }
  }
}

0개의 댓글