Java I / O: Stellen Sie sicher, dass eine Datei vor einem R / W-Vorgang nicht von einem anderen Prozess gesperrt wird

8

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!

    
sylvain 10.01.2012, 11:21
quelle

2 Antworten

1

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.

Ссылка

    
Peter Lawrey 10.01.2012 11:25
quelle
0
Das Teilen von Dokumenten über Prozesse hinweg ist schwierig, insbesondere wenn Sie keine dedizierten Dateisysteme verwenden (wie GFS). Ich glaube nicht, dass die Java-Sperr-API Ihnen viel helfen kann. Ich denke, dass Sie mit Ihrer Idee auf dem richtigen Weg sind der Try / Fail-Strategie ... Mit Java 7 können Sie einen WatchService verwenden, um Dateiänderungen zu überwachen und dann entsprechend Ihren Geschäftsanforderungen zu handeln ... Welche Art von System verwenden Sie? Windows behält die Handles auf Dateien während der Ewigkeit ...

HTH Jerome

    
romje 10.01.2012 12:16
quelle

Tags und Links