Ich habe ein wiederkehrendes Problem in einer Anwendung, die den Inhalt von Dateien in einem Verzeichnis basierend auf der Java 7 WatchService-API nachverfolgt. Wenn das zugrunde liegende Dateisystem ein Änderungsereignis für eine Datei auslöst, möchte ich sofort dessen SHA-256 berechnen.
Es kommt jedoch oft vor, dass ein anderer Prozess die Datei geöffnet hat (d. h. Word), wodurch eine exklusive Sperre aufgehoben wird und meine Anwendung von keiner Lese- / Schreiboperation abgehalten wird. Wenn ein Stream / Channel für die geöffnete Datei erstellt wird, wird eine FileNotFoundException oder eine FileSystemException für nio APIs mit einer Nachricht wie folgt ausgelöst:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird
Ich war nicht in der Lage, mit einer Lösung zu kommen, die solche Fälle erkennen würde, ohne eine "echte" FileNotFoundException zu maskieren, wenn die Datei tatsächlich nicht auf den fs existiert.
Ich bin auf die Idee gekommen, Existenz über File.exists zu prüfen, und wenn eine FileNotFoundException ausgelöst wird, wenn ich einen Stream öffne, könnte ich schlussfolgern, dass die Datei gesperrt ist. Ich bin offen für jeden Input dazu!
Danke!
Haben Sie versucht, die Datei selbst zu sperren? Ich nehme an, Sie können nur eine Sperre erwerben, wenn sie nicht gesperrt ist und existiert.
HTH Jerome
Tags und Links java locking nio watchservice nio2