2011-01-03 11 views
1

Ich zugreifen einige Dateien auf dem Server mit meiner Anwendung. Mehrere Benutzer können sich bei der Anwendung anmelden, ich möchte einige Dateien explizit sperren, die von 1 des Benutzers geöffnet werden und die Sperre aufheben möchten, wenn sich der Benutzer abmeldet oder die Verwendung der Datei beendet.Setzen Sie eine Sperre auf Datei

Irgendwelche Hilfe wie es geht?

Vielen Dank im Voraus

+0

ziemlich vage ... –

+4

http : //stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible –

+0

Durch sie gegangen ... was, wenn eine Person, die die Sperre anwendete, das Schloss nicht freigibt ? – Varun

Antwort

1

Sie können dies versuchen:

try { 
    // Get a file channel for the file 
    File file = new File("filename"); 
    FileChannel channel = new RandomAccessFile(file, "rw").getChannel(); 

    // Use the file channel to create a lock on the file. 
    // This method blocks until it can retrieve the lock. 
    FileLock lock = channel.lock(); 

    // Try acquiring the lock without blocking. This method returns 
    // null or throws an exception if the file is already locked. 
    try { 
     lock = channel.tryLock(); 
    } catch (OverlappingFileLockException e) { 
     // File is already locked in this thread or virtual machine 
    } 

    // Release the lock 
    lock.release(); 

    // Close the file 
    channel.close(); 
} catch (Exception e) { 
} 

Hope this helfen Ihnen

+0

@ UNNI - wat im Falle von some1 nicht erreichen lock.release() wird die Datei veröffentlicht ich meine, was, wenn Benutzersitzung abläuft oder er schließt den Browser was in diesen Fällen? – Varun

+0

Das Szenario, über das Sie sprechen, ist, dass die Datei bereits von x user gesperrt wurde. In diesem Fall wird lock.release nicht ausgeführt, da die Ausnahme ausgelöst wird. Wenn Sie jetzt über den Sitzungsumfang sprechen, wollen Sie diesen Mechanismus für die Dateiverarbeitung beziehen, während sich der Benutzer im Sitzungsumfang befindet. Ich denke, Sie setzen eine Sperre für die Datei nur dann, wenn der Benutzer gültig und in Sitzung ist. In anderen Scannern Code kann nicht ausgeführt werden. Diese Entscheidung basiert auf Ihrem Design. Dritte Sache ist, wenn der Benutzer den Browser geschlossen hat, dann können Sie das Ereignis mit Javascript erfassen und Server Seite comand foraction senden – UVM

0

Sie können versuchen, mit FileLock. Sie können schwierig sein, richtig zu werden, aber es kann Ihre einzige Wahl sein.

0

Verwenden Sie eine Datenbank? Warum haben Sie keine Tabelle, die die von einem Benutzer gesperrten Dateien auflistet? Sie können Sperren dann durch Einfügen/Löschen einer Zeile erfassen und freigeben.

Vergessen Sie nicht eine Admin-Schnittstelle zum Freigeben von Sperren, die falsch gehalten wurden. Sehen Sie sich auch eine Art Timeout Implementierung (dh eine Sperre ist nicht mehr gültig, nachdem XX Stunden)

+0

m keine DB – Varun

Verwandte Themen