簡體   English   中英

在Java中設置文件創建時間戳

[英]Setting file creation timestamp in Java

我知道設置Java中不存在創建時間戳,因為Linux沒有它,但有沒有辦法在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");
        }
    }
}

以下是使用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)方法參數分別設置上次修改時間,上次訪問時間和創建時間。

Java 7開始,您可以使用java.nio.file.Files.setAttributecreationTime屬性:

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 

我相信你有以下選擇:

  1. 找到一個可以執行此操作並可從命令行調用的工具。 然后,您可以從Java代碼中與它進行交互。
  2. MSDN 文件時間的以下鏈接顯示了任何工具的工作方式 - 特別注意函數GetFileTimeSetFileTime

在這里,我想你會很幸運:)在Google上搜索這些功能我在SO上發現了一個帖子。 對於如何使用Java發現文件的創建時間, 這個答案 (不是公認的)似乎完全符合您的要求,使用JNA和上述方法。 如果確實如此,那么請再次投票回答:)

請不要介意它有一個方法來設置創建時間。 我希望你能設法讓它運作起來。

如果使用jdk> = 1.7,則應搜索java.nio

你也可以嘗試這個(在Macos Mavericks上為我工作得很好,給我兩個不同的時間戳):

file.setLastModified(created.getTime()); //Older Timestamp
file.setLastModified(updated.getTime()); //Newer Timestamp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM