Überwachung eines Ordners ohne JNI

Status
Nicht offen für weitere Antworten.

raynic35

Mitglied
Hallo,

welche effektive Möglichkeit gibt es mit Hilfe von Java aber ohne JNI einen Ordner zu überwachen?
Wie kann ich zum Beispiel feststellen wann eine größere Datei, die im Ordner gespeichert wurde, fertig ist mit der Speicherung? So damit man darauf zugreifen kann.

Gibt es dazu vielleicht Muster oder sogar Frameworks, die man verwenden kann?

Danke...

Gruss Ray
 
G

Gast

Gast
Am effektivsten wäre natürlich eine implementieurung per JNI!
 

madboy

Top Contributor
Eine effektive Lösung fällt mir leider nicht ein, aber du könntest in Intervallen abfragen, wann zuletzt auf die Datei/den Ordner zugegriffen wurde. Wenn der letzte Zugriff länger her ist als eine bestimmte Zeit, dann ist die Datei fertig gespeichert.
 

Leroy42

Top Contributor
madboy hat gesagt.:
Wenn der letzte Zugriff länger her ist als eine bestimmte Zeit, dann ist die Datei fertig gespeichert.

und was ist diese bestimmte Zeit?

Code:
public static void main(String[] args) {
  PrintWriter pw = new PrintWriter(new FileWriter("irgend/wo/42.txt"));
  pw.print("Hello World");
  try {Thread.sleep(42424242);} catch (InterruptedException e) {}
  pw.println("."); // hab' ich ganz vergessen :-(
  pw.close();
}
 

madboy

Top Contributor
Leroy42 hat gesagt.:
madboy hat gesagt.:
Wenn der letzte Zugriff länger her ist als eine bestimmte Zeit, dann ist die Datei fertig gespeichert.

und was ist diese bestimmte Zeit?

Code:
public static void main(String[] args) {
  PrintWriter pw = new PrintWriter(new FileWriter("irgend/wo/42.txt"));
  pw.print("Hello World");
  try {Thread.sleep(42424242);} catch (InterruptedException e) {}
  pw.println("."); // hab' ich ganz vergessen :-(
  pw.close();
}
So etwas ähnliches hatte ich befürchtet (eigentlich eher eine Übertragung über ein Netzwerk), daher die vage Aussage mit der "bestimmten Zeit". In deinem Beispiel würde ich diese Zeit als größer 42424242 ms wählen :wink:

Ohne JNI sehe ich keine andere Möglichkeit, ausser vielleicht die Größe der Datei abzufragen, aber das wird nix, wenn der Dateispeicherplatz auf einen Schlag allokiert wird.
 

raynic35

Mitglied
Hallo,

danke für die Antworten. Ich habe es jetzt erstmal mit einer eigenen Lösung, die auf Exceptions basiert gemacht. Man untersucht einfach, ob man auf die Dateien im entsprechenden Verzeichnis einen FileInputStream öffnen kann. Wenn man per Hand eine große Datei in das Verzeichnis kopiert, dann bekommt man solange eine Exception bis sie vollständig gespeichert wurde.

Soweit so gut... Nur werden Dateien nicht immer von Hand kopiert und so habe ich es mit einem FileOutputStream getestet, der in das Verzeichnis eine große Datei schreibt. Jetzt bekomme ich leider keine Exception wenn ich darauf zugreifen will. Kann mir jemand sagen warum? Oder vielleicht einen Weg zeigen, wie ich eine Exception erzeugen könnte?

Danke,
Gruss Ray
 

Hilefoks

Bekanntes Mitglied
raynic35 hat gesagt.:
... Man untersucht einfach, ob man auf die Dateien im entsprechenden Verzeichnis einen FileInputStream öffnen kann. Wenn man per Hand eine große Datei in das Verzeichnis kopiert, dann bekommt man solange eine Exception bis sie vollständig gespeichert wurde.
Das funktioniert aber sicher nur unter Windows. ;-)

Ohne JNI gibt es noch eine andere Möglichkeit. Benutze MD5-Summen. Ideal ist diese Methode wenn das kopierende Programm auch selbst erstellt wurde. Dann ist das sehr einfach, effizient und sicher.

MfG,
Hilefoks
 

raynic35

Mitglied
Hallo Hilefoks,

Das funktioniert aber sicher nur unter Windows. ;-)

Was wäre z.B unter Linux anders?

Ohne JNI gibt es noch eine andere Möglichkeit. Benutze MD5-Summen. Ideal ist diese Methode wenn das kopierende Programm auch selbst erstellt wurde. Dann ist das sehr einfach, effizient und sicher.

Ich habe versucht eine MD5-Summe eines längeren FileInputStream zu testen(ca. 250 MB) und es hat solange gedauert, dasss ich das Ergebnis nicht überprüfen konnte. Bei einem kurzen ging es recht gut. Aber wie verhält es sich mit größeren Dateien? Kannst du mir das Verfahren mit Hilfe der MD5-Summen bitte näher erklären. Danke...

Gruss Ray
 

raynic35

Mitglied
Hallo Wildcard,

Finde ich übrigens schön zu sehen das mein Vorschlag kommentarlos ignoriert wird, aber ist ja nicht mein Bier.... :toll:

Sorry, das war nicht meine Absicht...
Das Problem war, das ich nicht von bestimmten Betriebsystemen ausgehen kann. Es kann also auch auf dem Mac, Unix(da würde die Linuxversion wahrscheinlich funktionieren) oder sonstigen zum Einsatz kommen.

Wie läuft das denn mit JNotify ab? Arbeitet man da mit ein und selben API, die die Windows bzw. Linuxvariante abstrahiert? Oder muss man den Code für beide Varianten einzeln schreiben?

Gruss Ray
 

Wildcard

Top Contributor
Du verwendest für beide Betriebssysteme die gleiche API.
Es handelt sich um eine Abstraktion des Linux iNotify bzw. des Windows File-System Listeners und ist somit um einiges Resourcenschonender als Polling-Modelle.
Linux und Windows decken etwa 97% des Markts ab, wenn die restlichen 3 Prozent relevant sind kannst du hierfür alternativ ein Polling verwenden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Methode zur Überwachung der Bildschirmgröße Allgemeine Java-Themen 11
P Überwachung der System-Zwischenablage Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
L Anzahl der Tage eines Monats Allgemeine Java-Themen 3
S Java Problem bei der Rückgabe eines Arrays Allgemeine Java-Themen 19
C Best Practice Tiefe Kopie eines Arrays unbekannter Dimension und unbekannten Typs Allgemeine Java-Themen 4
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
C Methode für tiefe Kopie eines unbekannt (dimensionierten & typisierten) Feldes realisierbar? Allgemeine Java-Themen 7
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
B Hintergrundbild eines JFrames? Allgemeine Java-Themen 3
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben