web-dev-qa-db-ja.com

Java)でファイル作成タイムスタンプを設定する

Linuxには作成タイムスタンプがないため、作成タイムスタンプの設定がJavaに存在しないことは知っていますが、Javaでファイル(Windows)の作成タイムスタンプを設定する方法はありますか?基本的なものがあります。ここで作成した変更タイムスタンプエディタ。

import Java.io.*;
import Java.util.*;
import Java.text.*;
import javax.swing.*;

public class chdt{
    static File file;
    static JFrame frame = new JFrame("Input a file to change");
    public static void main(String[] args) {
        try{

            final JFileChooser fc = new JFileChooser();
            fc.setMultiSelectionEnabled(false);

            //BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            //System.out.println("Enter file name with extension:");
            //String str = bf.readLine();
            JOptionPane.showMessageDialog(null, "Input a file to change.");
            frame.setSize(300, 200);

            frame.setVisible(true);

            int retVal = fc.showOpenDialog(frame);
            if (retVal == JFileChooser.APPROVE_OPTION) {
                file = fc.getSelectedFile();
                frame.setVisible(false);
            } else {
                JOptionPane.showMessageDialog(null, "3RR0RZ!  You didn't input a file.");
                System.exit(0);
            }

            //System.out.println("Enter last modified date in 'dd-mm-yyyy-hh-mm-ss' format:");
            //String strDate = bf.readLine();
            String strDate = JOptionPane.showInputDialog("Enter last modified date in 'dd-mm-yyyy-hh-mm-ss' format:");

            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss");
            Date date = sdf.parse(strDate);

            if (file.exists()){
                file.setLastModified(date.getTime());
                JOptionPane.showMessageDialog(null, "Modification is successful!");
            }
            else{
                JOptionPane.showMessageDialog(null, "File does not exist!  Did you accidentally it or what?");
            }
        }
        catch(Exception e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "3RR0RZ");
        }
    }
}
17
user263078

次の選択肢があると思います。

  1. これを実行し、コマンドラインから呼び出すことができるツールを見つけます。次に、Javaコードから操作できます。
  2. 次のMSDNからのリンク File Times は、ツールがそれをどのように実行するかを示しています-特に関数GetFileTimeSetFileTimeに注意してください。

そしてここで私はあなたが幸運になると思います:)グーグルでそれらの関数を検索して私はここSOに投稿を見つけました。 この回答 (受け入れられたものではありません)から Javaでファイルの作成時間を検出する方法 JNAと上記の方法を使用してあなたが望むことを正確に行うようです。もしそうなら、もう一度その答えに賛成してください:)

タイトルにも作成時間を設定する方法がありますのでご注意ください。私はあなたがそれをうまく動かすことができることを願っています。

2
user890904

これは、nioフレームワークを使用してJava 7で行う方法です。

_public void setFileCreationDate(String filePath, Date creationDate) throws IOException{

    BasicFileAttributeView attributes = Files.getFileAttributeView(Paths.get(filePath), BasicFileAttributeView.class);
    FileTime time = FileTime.fromMillis(creationDate.getTime());
    attributes.setTimes(time, time, time);

}
_

BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime)メソッド引数は、それぞれ最終変更時刻、最終アクセス時刻、および作成時刻を設定します。

25
harperska

Java 7から、 Java.nio.file.Files.setAttribute およびcreationTime属性:

Path p = Paths.get("C:\\Users\\first.last\\test.txt");
try {
    Calendar c = Calendar.getInstance();
    c.set(2010, Calendar.MARCH, 20);
    Files.setAttribute(p, "creationTime", FileTime.fromMillis(c.getTimeInMillis()));
} catch (IOException e) {
    System.err.println("Cannot change the creation time. " + e);
}

他の属性を見つけることができます ここ

Name                  Type
-------------------------------
"lastModifiedTime"    FileTime
"lastAccessTime"      FileTime
"creationTime"        FileTime
"size"                Long
"isRegularFile"       Boolean
"isDirectory"         Boolean
"isSymbolicLink"      Boolean
"isOther"             Boolean
"fileKey"             Object
17