어제 오늘 내일

[Java] 파일 또는 디렉토리 생성일자 구하기 본문

IT/Java

[Java] 파일 또는 디렉토리 생성일자 구하기

hi.anna 2021. 5. 31. 01:00

 

Java API를 이용하여, 파일이나 디렉토리를 다루는 방법을 알아보고 있습니다.

[Java] 텍스트 파일 읽기 ( FileReader, BufferedReader, Scanner, Files )

[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)

[Java] 파일, 디렉토리 존재 여부 확인하기

[Java] 파일에 텍스트 쓰기

[Java] 파일, 디렉토리 삭제하기

[Java] 현재 디렉토리 가져오기

[Java] 파일 사이즈 구하는 3가지 방법

[Java] 디렉토리 생성하기

 

이번에는, 파일의 생성일자를 구하는 방법을 알아보도록 하겠습니다.

  1. 파일의 Metadata
  2. Files.getAttribute()
  3. Files.readAttributes()

 

 

1. 파일의 Metadata

metadata

파일의 생성일자는 파일의 'Metadata'입니다.

Metadata란, 'data about other data', 즉, 데이터에 대한 데이터입니다.

파일 시스템에서, 파일이나 디렉토리는, 이것을 표현하는 데이터(즉, 메타 데이터)를 가지고 있습니다.

예를 들어, 파일 사이즈, 생성일자, 수정일자, 권한 등이 파일이나 디렉토리에 대한 메타 데이터 입니다.

이번 포스팅에서 알아보려고 하는 파일의 생성일자 역시 파일의 메타 데이터이기 때문에,

파일의 생성일자를 알기 위해서는, 파일의 메타 데이터가 어떻게 관리되고, 어떻게 읽을 수 있는지 알아야 합니다.

 

attribute

Java에서 파일의 메타 데이터는, attribute로 관리됩니다.

 

view

그런데, 파일은 파일 시스템에 따라서 다른 속성을 가지고 있습니다.

예를 들어, DOS와 UNIX의 파일 시스템이 다르고, 각각이 가지고 있는 속성도 조금씩 다릅니다.

따라서, Java는 관련된 파일 속성들을 모아놓은 view를 제공합니다.

  • BasicFileAttributeView
  • DosFileAttributeView
  • PosixFileAttributeView
  • FileOwnerAttributeView
  • AclFileAttributeView
  • UserDefinedFileAttributeView

이 중, BasicFileAttributeView는 모든 파일 시스템이 공통적으로 가지고 있는 속성을 제공합니다.

파일 생성일자도 BasicFileAttributeView를 통해서 얻어올 수 있습니다.

 

 

 

2. Files.getAttribute()

java.nio.file.Files 클래스의 getAttribute()를 이용하면, 

파일의 속성(attribute)를 읽어올 수 있습니다.

public static Object getAttribute​(Path path, String attribute, LinkOption... options) throws IOException

 

  파라미터  

  • path
    • file path
  • attribute
    • 읽어올 attribute
    • [view-name:]attribute-name
    • view-name은 생략할 수 있고, 생략되면 default 값은 'basic'입니다.
  • options
    • symbolic link를 처리하는 방법.
    • default : 아무것도 입력하지 않으면 default로 link의 최종 target 파일의 속성값을 읽습니다.
    • NOFOLLOW_LINKS : symbolic link의 target 속성이 아닌, symbolic link의 속성을 읽습니다.

 

  예제  

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;

public class GetCreationDate {
    public static void main(String[] args) {

        Path file = Paths.get("d:\\example\\image.jpg");

        try {

            // 파일 생성일자 찾기
            FileTime creationTime = (FileTime) Files.getAttribute(file, "creationTime");

            // 결과 출력
            System.out.println(creationTime);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileTime creationTime = (FileTime) Files.getAttribute(file, "creationTime");

Files.getAttribute() 메소드를 이용하여, 파일 생성일자를 조회하였습니다.

Files.getAttribute() 메소드가 리턴하는 값 중, 날짜 타입은 FileTime 타입으로 리턴됩니다.

(creationTime, lastModifiedTime, lastAccessTime)

 

 

 

3. Files.readAttributes()

readAttributes() 메소드는

파일의 여러가지 속성을 한꺼번에 읽어올 수 있습니다.

파일에 대한 여러가지 속성이 필요한 경우, 

파일의 속성을 확인하기 위해 여러번 파일에 접근하는 것은 효율적이지 못합니다.

따라서, 파일에 대한 속성이 한꺼번에 여러개가 필요한 경우 readAttributes() 메소드를 사용할 수 있습니다.

readAttributes() 메소드는 조회할 attribute를 문자열로 지정할 수도 있고,

Class를 전달하여 지정할 수도 있습니다.

public static Map<String,​Object> readAttributes​(Path path, String attributes, LinkOption... options) throws IOException
public static <A extends BasicFileAttributes> A readAttributes​(Path path, Class<A> type, LinkOption... options) throws IOException

 

  파라미터  

  • attribute
    • 읽어올 attribute 목록을 문자열로 전달합니다.
String attribute 설명
"*" 전체 BasicFileAttributes 속성
"size,lastModifiedTime,lastAccessTime" BasicFileAttributes의 size, lastModifiedTime, lastAccessTime
"basic:*" 전체 BasicFileAttributes 속성
"basic:size,lastModifiedTime,lastAccessTime" BasicFileAttributes의 size, lastModifiedTime, lastAccessTime
  • type
    • 읽어올 속성을 포함하고 있는 Class를 전달합니다.
    • 나머지는 파라미터는 Files.getAttribute()와 같습니다.

 

  예제 1  

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.util.Map;

public class GetCreationDate {
    public static void main(String[] args) {

        Path file = Paths.get("d:\\example\\image.jpg");

        try {

            // 파일 속성 찾기
            Map<String, Object> attributes 
                    = Files.readAttributes(file, "*");
                
            FileTime creationTime = (FileTime) attributes.get("creationTime");

            // 결과 출력
            System.out.println(creationTime);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Map<String, Object> attributes = Files.readAttributes(file, "*");

BasicFileAttributes 의 모든 속성을 읽어와서 Map 형태로 리턴합니다.

 

  예제 2  

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;

public class GetCreationDate {
    public static void main(String[] args) {

        Path file = Paths.get("d:\\example\\image.jpg");

        try {

            // 파일 속성 찾기
            BasicFileAttributes basicFileAttributes 
                = Files.readAttributes(file, BasicFileAttributes.class);

            // 결과 출력
            System.out.println(basicFileAttributes.creationTime());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

BasicFileAttributes basicFileAttributes = Files.readAttributes(file, BasicFileAttributes.class);

BasicFileAttributes 의 모든 속성을 읽어와서 BasicFileAttributes 클래스 형태로 리턴합니다.

 


 

java.nio.file.Files 클래스를 이용하여

파일의 생성일자를 가져오는 방법을 알아보았습니다.

 

 

반응형
Comments