2012-02-08 10 views
11

Wiem, że ustawienie znacznika czasu tworzenia nie istnieje w Javie, ponieważ Linux go nie ma, ale czy istnieje sposób na ustawienie znacznika czasu tworzenia pliku (Windows) w Javie? Posiadam podstawowy edytor znaczników czasu modyfikacji, który stworzyłem tutaj.Ustawianie znacznika czasu tworzenia plików w Javie

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"); 
     } 
    } 
} 

Odpowiedz

2

wierzę masz następujące opcje:

  1. znaleźć narzędzie, które wykonuje to i jest wymagalne z wiersza poleceń. Następnie możesz wchodzić z nim w interakcję za pomocą kodu Java.
  2. Poniższy link z MSDN File Times pokazuje, jak to zrobi każde narzędzie - zwróć szczególną uwagę na funkcje GetFileTime i SetFileTime.

I tutaj chyba będzie ci się szczęśliwie :) Wyszukiwanie tych funkcji w Google Znalazłem wpis tutaj na SO. This answer (niezatwierdzony) do How to Discover a File's Creation Time with Java wydaje się robić dokładnie to, co chcesz, używając JNA i metod powyżej. A jeśli tak, to proszę powtórzyć tę odpowiedź jeszcze raz :)

Proszę nie zwracać uwagi na tytuł, który ma metodę ustawienia czasu tworzenia. Mam nadzieję, że uda ci się to sprawić.

0

Należy szukać java.nio jeśli używasz JDK> = 1,7

Można również spróbować (pracował dobrze dla mnie na MacOS Mavericks i przynieś mi dwa różne znaczniki czasu):

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

Jak to ustawić plik czas utworzenia? –

16

Oto jak to zrobić w Java 7 z Nio ram:

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); 

} 

z BasicFileAttributeView.setTimes(FileTime, FileTime, FileTime) metoda argumentów czas ostatniej modyfikacji, ostatni dostęp czasu, a czas tworzenia re spektywnie.

6

Począwszy od Java 7, można użyć java.nio.file.Files.setAttribute i atrybut 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); 
} 

Inne atrybuty można znaleźć here:

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

Niestety, ustawienie czasu utworzenia kończy się po cichu w niektórych Uniksach (np. OS X, nawet jeśli * powinno * być obsługiwane na HFS). Jeśli chcesz mieć pewność, że został ustawiony, czytaj po napisaniu i sprawdzeniu! – hendrik

Powiązane problemy