Wie prüfen ob eine Datei vom OS fertig geschrieben wurde?

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hallo,

ich hab eine Applikation, die unter anderem Dateien aus definierten Verzeichnissen einliest.

In diese Verzeichnisse können die Dateien auf verschiedensten Wegen gelangen (händisch kopieren, scripte usw.)

Nun möchte ich sicherstellen, das - wenn ich die Dateien einlese - diese schon komplett in das Verzeichnis geschrieben wurde, so das ich nicht eine Datei einlese die noch mitten im Kopiervorgang ist.

Wie stell ich das am Besten an?

2 Ideen hatte ich bisher:

1. Da meine Applikation nur auf Linux-Kisten laufen wird, dachte ich daran mit "lsof" zu prüfen, ob irgendein anderer Prozeß auf die Datei zugreift.

2. Nach einem definierten Intervall die Grösse der Datei prüfen. Hat sie sich nicht geändert wäre das ein (unsicheres) Indiz dafür das sie fertig geschrieben wurde.

Ich finde beide Möglichkeiten nicht so toll, fällt jemand eine bessere Möglichkeit ein?
 

Leroy42

Top Contributor
Wenn du prüfen kannst, ob ein anderer Prozeß
die Datei in der Mangel hat, wäre das doch
ein vernünftiger Lösungsansatz.

Die Längenprüfung, da gebe ich dir Recht, ist
nicht zu empfehlen.
 

jollyroger

Bekanntes Mitglied
Ja,

an der ersten Möglichkeit stört mich halt, dass

- es nicht mehr plattformunabhängig ist (ok, es sei denn auf der windows-Kiste ist cygwin mit lsof). Auch wenn die Applikation später nur unter Linux laufen soll, fände ich schöner das trotzdem offen zu halten.
- ich die Rückgabe von lsof auswerten muss

Ich dachte es gäbe da auch java-Mittel, hab aber leider in der API-Doku unter File* nichts entsprechendes gefunden...

Wenn noch jemand eine Idee hat nur raus damit, ansonsten werde ich halt lsof nehmen (mit Bauchschmerzen).
 
Ich mach das immer so dass der schreibende Prozess erstmal eine temporäre Datei erzeugt oder per FTP/SSH überträgt. Erst wenn die Datei vollständig ist wird diese in den richtigen Dateinamen umbenannt.

Eine andere alternative ist die Erzeugung einer leeren Flag-Datei, die erst nach der Erzeugung der Datendatei angelegt wird. Das Programm muss dann prüfen ob diese Datei existiert bevor die eigentliche Datendatei verarbeitet werden kann.

Gruß,
Marcel
 

Hilefoks

Bekanntes Mitglied
Marcel Gascoyne hat gesagt.:
Eine andere alternative ist die Erzeugung einer leeren Flag-Datei, die erst nach der Erzeugung der Datendatei angelegt wird.
Ganz ähnlich mache ich es auch - nur das meine Flag-Datei eine md5 Datei ist. Dies bietet mir zwei Vorteile gegenüber deiner Methode:

a) Ich kann dem Benutzer besser "verkaufen" das mein Programm nur Dateien mit gültigen md5-Summen verarbeitet als das ich ihm umständlich erkläre das er die Daten erst umbennen muss, dann kopieren, dann wieder umbennen... oder auch das er eine zusätzliche Datei erstellen muss (was er zwar mit md5 auch tut, für ihn aber auch Sinn ergibt).

b) Mein Programm kann testen ob die Datei korupt ist. Wenn die md5 nicht stimmt ist die Datei korupt oder nicht fertig kopiert. Dann merke ich mir die falsche md5-Summe der Datei und teste einige Sekunden später nochmals. Sollte die md5 dann immer noch nicht stimmen und die letzte md5 der Datei (die ich mir gemerkt habe) gleich der aktuellen sein dann ist die Datei korupt - ansonsten ist sie noch am kopieren.

MfG,
Hilefoks
 

HoaX

Top Contributor
mittels nio solltest du das hinbekommen die datei zu öffnen und dann zu locken, wenn sie sich nicht locken lässt greift wohl grad noch jemand anderes darauf zu. siehe FileChannel oder so - hab bislang nie wirklich was mit nio gemacht
 

thE_29

Top Contributor
Die Frage ist aber, ob die andere Datei das sperrt..

Manchmal kann man ja Files die man runterlädt net mal wegkopieren == komplett gesperrt! Manchmal gehts aber schon.. Da stellt sich die Frage ob das gesperrt ist oder nicht!

Und Linux ist sowieso eine andere Geschichte.. Da kannst du ein jar File löschen das du gerade ausführst... Oder Scripte können sich selbst löschen..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
C Prüfen, ob eine Methode eine andere überschreibt! WIE? Allgemeine Java-Themen 8
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
J Mit Lombok Integer Range prüfen Allgemeine Java-Themen 6
S Prüfen ob Textfile existiert Allgemeine Java-Themen 9
E Programm auf Installation prüfen Allgemeine Java-Themen 1
S Binärbaum prüfen Allgemeine Java-Themen 0
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
W Datum prüfen + zweistellig Allgemeine Java-Themen 11
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
M .jar nach Datei prüfen Allgemeine Java-Themen 2
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D Best Practice Prüfen ob jar nachträglich geändert wurde Allgemeine Java-Themen 2
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
H String auf Zahlen prüfen Allgemeine Java-Themen 4
T auf Valides Datum prüfen Allgemeine Java-Themen 12
N Java Version Prüfen lassen Allgemeine Java-Themen 11
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
T Methoden Zahlenpalindrom laufzeitoptimiert prüfen Allgemeine Java-Themen 4
U ResourceBundles auf vollständigkeit prüfen Allgemeine Java-Themen 2
C jollyday: prüfen, ob Datum = Feiertag Allgemeine Java-Themen 8
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
M Binärbaum auf vollständigkeit prüfen Allgemeine Java-Themen 4
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
N List auf null prüfen Allgemeine Java-Themen 2
B generischen Typ prüfen Allgemeine Java-Themen 7
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
N Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen? Allgemeine Java-Themen 8
B Prüfen ob ein Programm gestartet wurde Allgemeine Java-Themen 23
N ArrayList nach Reihenfolge prüfen Allgemeine Java-Themen 2
C Prüfen auf Zahl und 6 stellig fehlerhaft? warum? Allgemeine Java-Themen 7
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
H Prüfen, ob doppete Werte in int-Array vorhanden sind Allgemeine Java-Themen 16
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K Zip dateien prüfen Allgemeine Java-Themen 3
G ZIP Archiv auf Konsistenz prüfen Allgemeine Java-Themen 2
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
P Sound Buffer prüfen Allgemeine Java-Themen 12
B PrintService - Wie prüfen ob Drucker online ist? Allgemeine Java-Themen 2
A Textfeld prüfen, ob ein Punkt eingegeben wurde Allgemeine Java-Themen 8
T Prüfen, ob Char ein Quantifier ist Allgemeine Java-Themen 6
N Prüfen ob Objekt in Liste enthalten ist Allgemeine Java-Themen 17
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
J Mit Patternmatching einen Satz prüfen Allgemeine Java-Themen 12
G Prüfen ob Ziffern einer Zahl pandigital sind? Allgemeine Java-Themen 15
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
N Prüfen ob ein String in einen Integer umgewandelt werden kan Allgemeine Java-Themen 4
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Datei Zugriffsrechte prüfen Allgemeine Java-Themen 2
Linad Bilder auf Gleichheit prüfen Allgemeine Java-Themen 6
G ResultSet auf Inhalt prüfen? Allgemeine Java-Themen 2
H Prüfen, ob es sich um ein Integer handelt Allgemeine Java-Themen 4
C String str prüfen Allgemeine Java-Themen 3
H Prüfen ob ein String grösser als 4 Zeichen ist Allgemeine Java-Themen 3
F Prüfen, ob Windows oder UNIX Allgemeine Java-Themen 2
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben