File 클래스는 파일 크기, 파일 속성, 파일 이름 등의 정보와 파일 생성 및 삭제의 기능을 제공합니다.
먼저 파일 객체를 생성하고 주소를 지정합니다.
저는 현재 Temp 폴더에 file.txt 파일이 없습니다.
@Log4j2
public class FileExample {
// File 객체를 이용해서, CMD의 dir 명령어의 출력결과를 만듬
public static void main(String[] args) throws IOException{
// 파일 객체 생성 시, 생성자 매개변수로 File 객체가 표현할
// 파일이나 디렉터리의 경로를 명시해주면 됨
// 이때, 지정된 파일이나 디렉토리는 실제 존재하지 않아도 오류가 나지 않음.
File dir = new File("C:/Temp/Dir");
File file1 = new File("C:/Temp/file1.txt");
File file2 = new File("C:/Temp/file2.txt");
// File file3 = new File("file:///C:/Temp/file3.txt");
log.info("1. dir : {}", dir);
log.info("1. dir : {}", file1);
log.info("1. dir : {}", file2);

참조변수가 해당 레퍼런스를 참조하기 때문에, 해당 레퍼런스에 파일이 없어도 잘 출력이 되는 것을 확인할 수 있습니다.
그렇다면 File 클래스의 메서드를 활용해서 디렉터리를 생성하겠습니다.
// 파일 생성
// mkdirs는 file 객체가 가지고 있는 전체 경로 상에
// 존재하지 않는 모든 디렉터리를 만들라는 의미임
// 즉, 없으면 만들고 있으면 그대로 둠
if(dir.exists() == false) {
// dir.mkdir();
dir.mkdirs();
} // if
// 없으면 새로운 파일 생성
if(file1.exists() == false) {
file1.createNewFile();
} // if
if(file2.exists() == false) {
file2.createNewFile();
} // if
위 코드에서 exists()는 파일 존재의 유무를 확인하는 메서드입니다.
해당 경로에 파일이 없으면 만들고 있다면 변경사항은 없습니다.
위 코드들을 활용해서 C드라이브의 Temp폴더의 디렉터리 목록을 보여주는 코드를 작성할 수 있습니다.
File temp = new File("C:/Temp");
// 날짜 객체로부터 포매팅 문자열 생성
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy/mm/dd a HH:mm");
// C:/temp 폴더 안에 있는 모든 파일을 배열로 획득
File[] contents = temp.listFiles();
// 실제 dir 명령의 출력 결과를 재현하는 코드
System.out.println(" 날짜 시간 형태 크기 이름");
System.out.println("------------------------------------------------------------");
for(File file : contents) {
// 파일/디렉터리의 최종 수정 시간을 얻고, 이를 포매팅 문자열처럼 출력
System.out.print(sdf.format(new Date(file.lastModified())));
if(file.isDirectory()) {
// 만약 디렉터리이면 디렉터리 표시기호를 만들어 넣어주고
System.out.print("\t<DIR>\t\t\t" + file.getName());
} else {
// 만약 파일이면 파일 크기와 이름을 표시
System.out.println("\t\t\t" + file.length() + "\t" + file.getName());
} // if-else
System.out.println();
} // enhanced for
} // main
} // end class

코드 자체는 크게 어렵지 않습니다.
for문은 temp 폴더 내 디렉터리, 파일을 하나씩 순회하며 콘솔에 출력하는 역할입니다.
위 코드는 명령 프롬포트의 명령어인 dir의 결과와 유사한 것을 알 수 있습니다.
'Java' 카테고리의 다른 글
객체 입출력 스트림 (0) | 2023.08.18 |
---|---|
보조 스트림 (0) | 2023.08.17 |
Exception Handling (0) | 2023.07.28 |
Exception (0) | 2023.07.27 |
익명구현객체 (0) | 2023.07.26 |