Настройка времени создания файла в Java
Я знаю, что установка метки времени создания не существует в Java, потому что Linux ее не имеет, но есть ли способ установить временную метку создания файла (Windows) на Java? У меня есть редактор временной метки изменения, который я сделал здесь.
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");
}
}
}
Ответы
Ответ 1
Я считаю, что у вас есть следующие возможности:
- Найдите инструмент, который делает это и может быть вызван из командной строки. Затем вы можете взаимодействовать с ним из вашего java-кода.
- Следующая ссылка из MSDN File Times показывает, как любой инструмент будет это делать - особенно обратите внимание на функции
GetFileTime
и SetFileTime
.
И здесь я думаю, вам повезет:) Поиск этих функций в Google я нашел здесь здесь. Этот ответ (не принятый) на Как открыть время создания файла с помощью Java, похоже, точно что вы хотите использовать JNA и методы выше. И если это так, то пожалуйста, воздержитесь от ответа еще раз:)
Пожалуйста, не обращайте внимания на название, у которого есть способ установить время создания. Надеюсь, вам удастся заставить его работать.
Ответ 2
Вот как вы это делаете в Java 7 с картой nio:
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)
устанавливают последнее измененное время, время последнего доступа и время создания соответственно.
Ответ 3
Начиная с 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
Ответ 4
Вам следует искать java.nio, если вы используете jdk >= 1.7
Вы также можете попробовать это (хорошо сработало для меня на Macos Mavericks и получить две разные временные метки):
file.setLastModified(created.getTime()); //Older Timestamp
file.setLastModified(updated.getTime()); //Newer Timestamp