Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Was wäre der beste Weg einen Text in eine Textdatei zu schreiben, wenn die Textdatei auf einem File-Server liegt und somit (theoretisch) mehrere Computer gleichzeitig versuchen könnten diese Textdatei zu erstellen / zu verändern?
Im Prinzip: man stellt sicher, dass höchstens parallel gelesen wird. Das ist aber gar nicht mal so einfach, zumindest nicht, wenn man plattformübergreifend und/oder im Netzwerk arbeitet.
Wenn die Textdatei auf einem File-Server liegt könnte der Zugriff auf das WebDAV-Protokoll beschränkt werden. So können Sperren und Versionierung ohne viel Aufwand unabhängig von Betriebs- oder Dateisystemen umgesetzt werden. Eine einfache kostenlose Option wäre: https://nextcloud.com/. Nextcloud auf einem RaspberryPi ist eine einfache und kostengünstige 24/7 Option im privaten Umfeld. Allerdings habe ich das in meinem Netzwerk abgelöst, da mir der Wartungsaufwand zu hoch ist.
Meine derzeitige Lösung ist Syncthing. Syncthing funktioniert auf allen gängigen Betriebs- und Dateisystemen inkl. Mobil-Devices.
Auf einem lokalen System würde ich sagen: Einfach das File-Objekt während der gesamten Laufzeit offenhalten, dann hat sich das erledigt. Aber ich glaube kaum, dass das in Netzwerken funktioniert.
Eine Alternative wäre, Schreibrechte auf diese Datei nur dem Nutzer zu gewähren, der sie angelegt hat.
Im Prinzip kann man auch einfach Dateisperren verwenden. Es spielt letztlich keine Rolle, ob ich jetzt per CREATE_NEW für ein Lock-File angebe, dass die Datei bei ihrer Erstellung nicht existieren darf oder ob ich eine exklusive Sperre für die eigenliche Datei anfordere: am Ende bin ich immer darauf angewiesen, dass Betriebssysteme, ggf. Dateisysteme, Netzwerkprotokolle und deren Implementierungen das auch entsprechend umsetzen.
Das Öffnen einer Datei setzt keine Sperre. Unter Linux kann ich z. B. problemlos einen Reader offen halten und parallel mit einem Writer in die Datei schreiben.
Im Prinzip kann man auch einfach Dateisperren verwenden. Es spielt letztlich keine Rolle, ob ich jetzt per CREATE_NEW für ein Lock-File angebe, dass die Datei bei ihrer Erstellung nicht existieren darf oder ob ich eine exklusive Sperre für die eigenliche Datei anfordere: am Ende bin ich immer darauf angewiesen, dass Betriebssysteme, ggf. Dateisysteme, Netzwerkprotokolle und deren Implementierungen das auch entsprechend umsetzen.
Das Öffnen einer Datei setzt keine Sperre. Unter Linux kann ich z. B. problemlos einen Reader offen halten und parallel mit einem Writer in die Datei schreiben.
Unter Windows ist das so.
Hab ich letztens gemerkt, als ich den Stream direkt als Parameter an einen BufferedReader übergeben hab anstatt vorher als Variable zu öffnen. Nach dem Ende des Einlesens in der Try-With-Resource blieb die Datei blockiert, ich konnte sie nicht umbenennen. Die Lösung war, für den Stream eine eigene Variable zu definieren, die dann auch entsprechend geschlossen wurde. Ob hier in der Java16 etwas an den AutoClosables geändert wurde im Vergleich zu früheren Versionen, kann ich nicht sagen. Der Inputstream hat jedenfalls die Datei gesperrt, auch nach Ende des Auslesens (da nicht automatisch geschlossen, warum auch immer. Ich dachte immer, ein BufferedReader würde seinen Inputstream gleich mit schließen).
Meine Log-Datei halt ich auch immer offen, da kann ebenfalls während der Ausführung kein anderer was ändern.
Leider ist das meistens so Unter Windows funktioniert das - natürlich, wie könnte es anders sein? - etwas anders. Da wird keine Sperre in dem Sinn gesetzt sondern es wird angegeben, wie der Zugriff geteilt wird. Standardmäßig ist kein anderer Prozess in der Lage, die Datei zu lesen/zu schreiben. Das kann man aber über Flags FILE_SHARED_READ und FILE_SHARED_WRITE steuern, auch eine Kombination ist möglich (s. dwShareMode unter https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#parameters)