Ich möchte den Änderungszeitstempel einer Binärdatei ändern. Was ist der beste Weg, dies zu tun?
Wäre das Öffnen und Schließen der Datei eine gute Option? (Ich benötige eine Lösung, bei der die Änderung des Zeitstempels auf jeder Plattform und JVM geändert wird).
Der Titel ist verwirrend, ebenso wie die akzeptierte Antwort. Berühren schafft eine Datei, falls sie nicht existiert. Der Titel sollte geändert werden.
– Benutzer239558
12. Juli 2018 um 8:22 Uhr
Yishai
Die File-Klasse hat eine setLastModified Methode. Das macht ANT.
Abgesehen davon, dass es einen bekannten Android-Fehler gibt und File.setLastModified auf den meisten Android-Geräten nichts bewirkt.
– Zeiger Null
19. Dezember 2015 um 17:57 Uhr
Und außer Schale touch erstellt die Datei, und dies nicht.
– Viktor Sergijenko
7. August 2016 um 21:58 Uhr
Mmmh mmh
Meine 2 Cent, basierend auf der Antwort von @Joe.M
public static void touch(File file) throws IOException{
long timestamp = System.currentTimeMillis();
touch(file, timestamp);
}
public static void touch(File file, long timestamp) throws IOException{
if (!file.exists()) {
new FileOutputStream(file).close();
}
file.setLastModified(timestamp);
}
sdgfsdh
Seit File ist eine schlechte Abstraktion, es ist besser zu verwenden Files und Path:
public static void touch(final Path path) throws IOException {
Objects.requireNonNull(path, "path is null");
if (Files.exists(path)) {
Files.setLastModifiedTime(path, FileTime.from(Instant.now()));
} else {
Files.createFile(path);
}
}
Hier ist ein einfacher Ausschnitt:
void touch(File file, long timestamp)
{
try
{
if (!file.exists())
new FileOutputStream(file).close();
file.setLastModified(timestamp);
}
catch (IOException e)
{
}
}
Im Grunde ist es ein Anruf File.setLastModified(modTime).
Raeky
Diese Frage erwähnt nur die Aktualisierung des Zeitstempels, aber ich dachte, ich würde das trotzdem hier einfügen. Ich habe nach Touch wie in Unix gesucht, das auch eine Datei erstellt, wenn sie nicht existiert.
Hier ist die Quelle von (eingebunden openInputStream(File f)):
public static void touch(final File file) throws IOException {
if (file.exists()) {
if (file.isDirectory()) {
throw new IOException("File '" + file + "' exists but is a directory");
}
if (file.canWrite() == false) {
throw new IOException("File '" + file + "' cannot be written to");
}
} else {
final File parent = file.getParentFile();
if (parent != null) {
if (!parent.mkdirs() && !parent.isDirectory()) {
throw new IOException("Directory '" + parent + "' could not be created");
}
}
final OutputStream out = new FileOutputStream(file);
IOUtils.closeQuietly(out);
}
final boolean success = file.setLastModified(System.currentTimeMillis());
if (!success) {
throw new IOException("Unable to set the last modification time for " + file);
}
}
Jemand sollte dies als Verbesserungsanfrage an unix4j senden: github.com/tools4j/unix4j
– Sridhar Sarnobat
21. Mai 2017 um 5:37 Uhr
Ich verstehe die Beziehung zwischen dem Titel und der Frage hier nicht?
– Lealo
28. September 2017 um 19:29 Uhr
@Lealo siehe Unix-Touch-Befehl
– Grüner Riese
9. Juli 2018 um 20:31 Uhr
Der Titel ist verwirrend, ebenso wie die akzeptierte Antwort. Berühren schafft eine Datei, falls sie nicht existiert. Der Titel sollte geändert werden.
– Benutzer239558
12. Juli 2018 um 8:22 Uhr