在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上搜索这些function我在SO上发现了一个post。 关于如何使用Java发现文件创建时间的 答案 (不是公认的)似乎完全按照您的需要使用JNA和上述方法。 如果确实如此,那么请再次回答这个问题:)

请不要介意它有一个方法来设置创建时间。 我希望你能设法让它发挥作用。

如果使用的是jdk> = 1.7,则应搜索java.nio

你也可以尝试一下(在Macos Mavericks上为我工作得很好,给我两个不同的时间戳):

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