[java] Java에서 파일 생성 날짜 결정

StackOverflow ( Java에서 파일 생성 날짜를 얻는 방법) 에 대한 또 다른 유사한 질문이 있지만 OP에는 다른 메커니즘을 통해 해결할 수있는 다른 요구가 있었기 때문에 대답은 실제로 없습니다. 연령별로 정렬 할 수있는 디렉터리에 파일 목록을 만들려고하므로 파일 생성 날짜가 필요합니다.

나는 웹을 많이 트롤링 한 후에 이것을 할 좋은 방법을 찾지 못했습니다. 파일 생성 날짜를 가져 오는 메커니즘이 있습니까?

현재 Windows 시스템에있는 BTW는 Linux 시스템에서도 작동하기 위해이 기능이 필요할 수 있습니다. 또한 생성 날짜 / 시간이 이름에 포함 된 위치에서 파일 명명 규칙을 따를 것이라고 보장 할 수 없습니다.



답변

Java nio 에는 파일 시스템이 제공하는 한 creationTime 및 기타 메타 데이터에 액세스하는 옵션이 있습니다. 확인 이 링크를 밖으로

예를 들어 (@ydaetskcoR의 의견에 따라 제공됨) :

Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);

System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());


답변

이 코드로 JDK 7을 사용하여이 문제를 해결했습니다.

package FileCreationDate;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Date;
import java.util.concurrent.TimeUnit;

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

        File file = new File("c:\\1.txt");
        Path filePath = file.toPath();

        BasicFileAttributes attributes = null;
        try
        {
            attributes =
                    Files.readAttributes(filePath, BasicFileAttributes.class);
        }
        catch (IOException exception)
        {
            System.out.println("Exception handled when trying to get file " +
                    "attributes: " + exception.getMessage());
        }
        long milliseconds = attributes.creationTime().to(TimeUnit.MILLISECONDS);
        if((milliseconds > Long.MIN_VALUE) && (milliseconds < Long.MAX_VALUE))
        {
            Date creationDate =
                    new Date(attributes.creationTime().to(TimeUnit.MILLISECONDS));

            System.out.println("File " + filePath.toString() + " created " +
                    creationDate.getDate() + "/" +
                    (creationDate.getMonth() + 1) + "/" +
                    (creationDate.getYear() + 1900));
        }
    }
}


답변

이 질문에 대한 후속 조치로-특히 생성 시간과 관련이 있고 새로운 nio 클래스를 통해 얻는 것에 대해 논의하기 때문에 지금 JDK7 구현에서 운이 좋지 않은 것 같습니다. 부록 : OpenJDK7에서도 동일한 동작이 있습니다.

Unix 파일 시스템에서는 생성 타임 스탬프를 검색 할 수 없으며 단순히 마지막 수정 시간의 복사본 만 가져옵니다. 너무 슬프지만 불행히도 사실입니다. 그 이유는 잘 모르겠지만 코드는 다음과 같이 구체적으로 수행합니다.

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;

public class TestFA {
  static void getAttributes(String pathStr) throws IOException {
    Path p = Paths.get(pathStr);
    BasicFileAttributes view
       = Files.getFileAttributeView(p, BasicFileAttributeView.class)
              .readAttributes();
    System.out.println(view.creationTime()+" is the same as "+view.lastModifiedTime());
  }
  public static void main(String[] args) throws IOException {
    for (String s : args) {
        getAttributes(s);
    }
  }
}


답변

다음은 클래스를 Java사용하여 에서 파일의 생성 날짜를 가져 오는 방법의 기본 예입니다 BasicFileAttributes.

   Path path = Paths.get("C:\\Users\\jorgesys\\workspaceJava\\myfile.txt");
    BasicFileAttributes attr;
    try {
    attr = Files.readAttributes(path, BasicFileAttributes.class);
    System.out.println("Creation date: " + attr.creationTime());
    //System.out.println("Last access date: " + attr.lastAccessTime());
    //System.out.println("Last modified date: " + attr.lastModifiedTime());
    } catch (IOException e) {
    System.out.println("oops error! " + e.getMessage());
}


답변

의 API java.io.File는 마지막 수정 시간 가져 오기만 지원합니다 . 그리고 인터넷은이 주제에 대해서도 매우 조용합니다.

중요한 것을 놓치지 않는 한 Java 라이브러리는있는 그대로 (Java 7까지 포함되지 않음)에는이 기능이 포함되어 있지 않습니다. 따라서이를 위해 절실한 경우 한 가지 해결책은 시스템 루틴을 호출하고 JNI를 사용하여 호출하는 C (++) 코드를 작성하는 것입니다. 하지만이 작업의 대부분은 JNA 라는 라이브러리에서 이미 완료된 것으로 보입니다 .

Windows 및 Unix / Linux / BSD / OS X에서 사용 가능한 동일한 시스템 호출을 찾을 수 없기 때문에이를 위해 Java에서 약간의 OS 특정 코딩을 수행해야 할 수도 있습니다.


답변

Windows 시스템에서는 무료 FileTimes를 사용할 수 있습니다. 라이브러리를 있습니다.

Java NIO.2 (JDK 7) 및 java.nio.file.attribute 패키지 를 사용하면 앞으로 더 쉬워 질 것입니다. 입니다.

그러나 대부분의 Linux 파일 시스템 은 파일 생성 타임 스탬프를 지원하지 않습니다 .


답변

java1.7 +에서이 코드를 사용하여 파일 생성 시간을 얻을 수 있습니다!

private static LocalDateTime getCreateTime(File file) throws IOException {
        Path path = Paths.get(file.getPath());
        BasicFileAttributeView basicfile = Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS);
        BasicFileAttributes attr = basicfile.readAttributes();
        long date = attr.creationTime().toMillis();
        Instant instant = Instant.ofEpochMilli(date);
        return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    }