Wie prüfe ich die Komplettheit von Dateien?

Status
Nicht offen für weitere Antworten.

aldi15

Mitglied
Hallo Liste,
ich habe ein Verzeichnis auf einem Linux-Server, in das in unregelmäßigen Abständen Bilddateien eingestellt werden.
Ich möchte nun ein Programm entwerfen, das in regelmäßigen Abständen nachschaut, ob Dateien vorhanden sind. Wenn ja, soll eine Bildverarbeitung stattfinden. Soweit so gut. Hier mein Problem:
Ich mache von dem Verzeichis ein java.io.File()-Objekt und lasse mir mit listFiles ein File-Array mit allen Dateien im Vz. geben. Das Array gehe ich durch und verarbeite jeden Member.
Allerdings kann es sein, daß unter den Files Dateien sind, die noch nicht komplett geliefert wurden. Diese dürfen (können) nicht weiterverarbeitet werden. Somit muss ich prüfen, ob die Datei komplett ist. Die Methoden "exists" und "canRead" geben auch dann true zurück, wenn die Datei noch nicht komplett ist. MD5 ist auch keine Lösung, da ich die Dateien, die ankommen nicht kenne. Man könnte die Dateigrößen merken und in einem zweiten Durchlauf vergleichen, aber es kommen > 10.000 Dateien an und das wäre zu zeitintensiv.
Weiß jemand hier eine elegante Methode, mit der ich die Komplettheit von Dateien prüfen kann? Gibt es da irgendeinen System-Flag oder sowas?

Schöne Grüße
Albrecht
 

voidee

Mitglied
vielleicht ein bisschen "tricky", aber wie wärs mit einer Minute warten und die Dateigrößen vergleichen?
 

aldi15

Mitglied
Hi Hoax,
einfach versuchen die datei mit exklusiven lese und schreibrechten zu öffnen...
das hört sich interessant an. Ich habe ja schon geschrieben, dass ich mit canRead geöffnet habe, aber das ging, obwohl die Datei noch nicht komplett angekommen war. Ich bezweifle, ob es mit canWrite besser geht.
Aber evtl. meinst du ja noch was anderes? Exklusiv lesen/schreiben? Ich kann in der Kommandozeile einen Befehl mit sudo absetzen. Wie mache ich das denn in einer Java- Funktion?
Schöne Grüße
Albrecht
 

aldi15

Mitglied
Hi nochmal,
also ich habe mir den Vorschlag von Wildcard mit jnotify mal angesehen:
jnotify:
JNotify is a java library that allow java application to listen to file system events, such as:

* file created.
* file modified.
* file renamed.
* file deleted.
Das hört sich für mich schon so an, als ob ich das brauchen könnte. Wenn man ein Event 'file created' abfragen kann und ich einen entsprechenden flag zurückbekomme, müsste ich doch wissen, ob die Datei komplett ist. Wieso meinst du das löst mein Problem nicht, ob die Datei fertig ist? ???:L

Grüße
Albrecht
 

NTB

Bekanntes Mitglied
Kannst Du die Methode beeinflussen, wie die Dateien auf den Server kommen?
Wenn ja, könntest Du sie umbenennen, sobald sie fertig hochgeladen sind und Deinem Programm beibringen, nur die umbenannten Dateien zu nehmen.
 

ARadauer

Top Contributor
oder wenn du beginnst etwas rauf zu stellen legst du eine hinweis datein hin. ichbingraddabeiwaszuschreiben.info und wenn du fertig bist löscht du das file. so kann der downloader erkennen, dass gerade was passiert
 

aldi15

Mitglied
Die Idee mit dem umbenennen oder eine Datei zuhilfe zu nehmen wäre naheliegend, aber ich habe keinerlei Einfluss auf den Lieferprozess. Wir bekommen die *.tif-Dateien nach einer Aktualisierung des Datenbestandes. Die Aktualisierung und das Liefern passieren automatisch durch einen Prozess, der schon implementiert ist. Ich muss hier Systemseitig erkennen, wann eine Datei angekommen ist, damit ich sie weiterverarbeiten kann.
Grüße
Albrecht
 
G

Gast2

Gast
Moin,

aldi15 hat gesagt.:
Ich muss hier Systemseitig erkennen, wann eine Datei angekommen ist, damit ich sie weiterverarbeiten kann.
JNotify ist eine super Idee ... Create-Event abfangen ... anschließend warten ... die Zeit die Du wartest kannst Du ja am Anfang abschätzen (durchschnittliche Bildgröße etc.) ... das warten dauert bei mir ca. 500 ms ... dann periodisch versuchen die Datei zum Schreiben(/Lesen) öffnen ... ein kleiner Timeout zwischen den Zugriffen spart CPU-Power (100ms sind nicht zu viel) ... Schreiben in eine Datei darf nur ein Programm ... konntest Du die Datei öffnen, dann gehört sie Dir

hand, mogel

PS: ich bekomme Bilder via FTP geliefert und muss sie in einen Ringspeicher schreiben ... prinzipell das gleiche
 

aldi15

Mitglied
@mogel:
Übrigens - bei dem Linux-Server gibts tatsächlich keinen Lock des Systems auf die (noch) nicht komplette Datei. Das habe ich schon ausprobiert - große Datei >100 MB - kopiert, dann versucht mit canRead und canWrite und geht beides. Wenn das nicht gegangen wäre (sprich, wenns einen Lock bei nicht kompletten Dateien gegeben hätte), hätte ich ja ein Signal gehabt, nach dem ich die Verarbeitung starten könnte.

@Hoax:
OK, ich habe mir mal die Klasse FileChannel angeschaut. Ja, da gibts eine Methode "lock". Aber eines kapiere ich nicht dabei: Wenn ich den lock jetzt als root auf ein file setzte, das ich testen will, dann kann ich es, wenn ich (bzw. mein Programm) als root das file öffnen will das doch mit Sicherheit auch tun- oder? Meiner Meinung nach müsste der lock doch eigentlich vom System kommen, damit ich mit öffnen/nicht-öffnen nachprüfen kann, ob die Datei vollständig ist. Wie kann FileChannel mir da helfen? Hab' ich jetzt einen Knoten irgendwo?
Grüße
Albrecht
 

Wildcard

Top Contributor
Das ist kein Java internes Lock, sondern ein System-Lock. Auf Systemen die das generell nicht gestatten, wird der Versuch einfach fehlschlagen.
 

aldi15

Mitglied
Hi,
ich habe es mal getestet mit einem lock. Hat tatsächlich kein Ergebnis gebracht:
Code:
   private boolean IsFileValid(File testfile) {
            boolean bIsValid = false;
            fos = new FileOutputStream(new File(testfile.toString()));
            FileLock lock = fos.getChannel().tryLock();
            if (lock != null) {
                lock.release();
                // File komplett!
                System.out.println("Die Datei "+testfile+" ist komplett");           
            }else{
                 System.out.println("Die Datei "+testfile+" ist noch nicht komplett");
            }
              fos.close();
     return bIsValid;
  }
if (lock != null) ist auch dann wahr, wenn die Datei noch nicht vollständig ist. Schade.
Hat noch jemand eine Idee? Wenn nicht, werde ich wohl oder übel doch Dateigrößen vergleichen müssen. :cry:
Grüße
Albrecht
 
G

Gast2

Gast
Moin,

aldi15 hat gesagt.:
if (lock != null) ist auch dann wahr, wenn die Datei noch nicht vollständig ist.
klar ... in dem Moment wo Du den Lock auf das File setzt, wird die Datei nicht mehr weiter eingeliefert da der FTP-Server ($WHATEVER) nicht mehr in die Datei schreiben kann ... der FTP-Server muss den Lock setzen und frei geben

du kannst die Größen vergleichen innerhalb eines gewissen Zeitrahmens, wird sich ja wohl nicht mehr ändern wenn die Datei fertig ist ... Du kannst auch testen ob die Datei komplett ist ... bei JPEG gibt es ein SOI und EOI Marker .. .wie es bei TIF ist weis ich nicht

hand, mogel
 

aldi15

Mitglied
Hi Mogel,
der FTP-Server muss den Lock setzen und frei geben
Und darauf habe ich leider keinen Einfluss. Also Dateigrößen vergleichen.
wie es bei TIF ist weis ich nicht
Man kann die Dateigröße wohl auch aus dem Header lesen, aber das scheint mir potentiell unsicher, denn der Lieferserver ist eine Windows-Kiste und mein Arbeitsserver Linux. Da auf NTFS und ext3 die Dateigrößen unterschiedlich berechnet werden, könnte es kleine Differenzen geben. Habe ich aber noch nicht ausprobiert.
Ansonsten lese ich mir die Dateigröße aus, warte 100ms und schaue nochmal nach.
Ist nicht wirklich schön, aber funktioniert.
Bis denne
Albrecht
 

HoaX

Top Contributor
aldi15 hat gesagt.:
. Da auf NTFS und ext3 die Dateigrößen unterschiedlich berechnet werden, könnte es kleine Differenzen geben. Habe ich aber noch nicht ausprobiert.

falsch, wenn du dir die bytes anschaust sind das immer gleich viele, wäre ja auch schlimm wenns anders wäre ... was du meinst ist vielleicht die anzeige in der gui, aber das hat nichts mit dem dateisystem zu tun.
 

Ebenius

Top Contributor
Vielleicht meint aldi15 auch den phyiskalisch verwendeten Speicher auf der Disk; in Abhängigkeit von Blockgrößen, oder so. Ich stimme meinem Vorredner zu; auf Dataisystemebene haben die Dateien exakt die gleiche Größe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Vergleichstool für xml-Dateien Tortoise-svn Verknüpfung Allgemeine Java-Themen 2
W ICEpdf PDF-Dateien werden mit Java 21 nicht nicht mehr vollständig dargestellt Allgemeine Java-Themen 3
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben