# Überprüfen, ob Datei geöffnet ist!



## Guest (27. Sep 2006)

Hallo!


Habe ich in Java die Möglichkeit, zu überprüfen ob eine Datei geöffnet ist?




Viele Grüße


----------



## André Uhres (27. Sep 2006)

Anonymous hat gesagt.:
			
		

> ..Habe ich in Java die Möglichkeit, zu überprüfen ob eine Datei geöffnet ist?..


Über einen FileLock kann man verhindern, daß von verschiedenen Benutzern 
gleichzeitig auf eine Datei zugegriffen wird:

```
private FileChannel file;
    private FileLock lock;
...
            try {
                file = new RandomAccessFile(new File("Myfile.txt"), "rw").getChannel();
                lock = file.tryLock();
                if(lock == null) {
                    //die Datei wurde bereits irgendwo geöffnet
                }else{
                    //die Datei ist noch von sonst niemandem geöffnet worden
                    //und ist jetzt hier geöffnet
                }
            } catch (IOException e){
                e.printStackTrace();
            }
```
Natürlich muss man zum Schluss den FileLock wieder freigeben:

```
try {
                lock.release();// Release the lock
                file.close();// Close the file
            } catch (IOException e) {
                e.printStackTrace();
            }
```


----------



## RaoulDuke (27. Sep 2006)

Wie verhält sich das denn unter verschiedenen Betriebssystemen? Unter Windows gibts ja irgendwie die Möglichkeit Files zu locken. Aber unter Linux kann ich eigentlich immer an eine Datei ran, egal was ein anderer Prozess gerade damit macht. Oder gilt das Java Lock nur innterhalb einer JVM?


----------



## André Uhres (28. Sep 2006)

RaoulDuke hat gesagt.:
			
		

> Wie verhält sich das denn unter verschiedenen Betriebssystemen? ..


*java.nio.channels.FileChannel.tryLock* versucht einen Systemweiten exclusive Lock der Datei zu bekommen. 

Die Methode gibt ein Lockobjekt zurück das den neu erworbenen Lock darstellt, oder null wenn der Lock 
nicht erworben werden konnte weil ein anderes Programm einen überlappenden Lock hält.

Wirft ClosedChannelException wenn der Channel "closed" ist,

OverlappingFileLockException wenn ein überlappender Lock bereits von derselben JVM gehalten wird
oder wenn ein anderer Thread gleichzeitig versucht einen überlappenden Lock zu erwerben, 

IOException wenn irgendein anderer I/O error passiert.


----------

