(Versions) Probleme mit FileLock

T

tomh89

Mitglied
Hallo
Ich habe ein Problem, ich habe vor einiger Zeit diese klasse programmiert und es funktionierte alles super.

Diese Klasse sollte nur 2 Files kruze Zeit schreibgeschützt machen um die Manipulation durch andere Programme zu verhindern während geschrieben wird.

Seit ich jedoch mein Runtime Environmeht von JRE 1.4.19 auf JRE 1.6 upgedatet hatte bekomme ich immer eien (java.nio.channels.ClosedChannelException)
Ich weiß dass diese ClosedChannelException bei der FileLock.release() Methode auftritt, kann mir aber nicht erklären wo das Problem liegt da ja nur ein JRE Update erfolgt ist und diese doch abwärtskompatibel sein müsste!

Danke an alle die mir weiterhelfen können oder es versuchen:toll::toll::toll::applaus:;)

Java:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
 
public class DirectoryLock {
public static final String LOCK_FILE_NAME = "directoryfile.lock";
private static FileLock m_file1Lock;
private static FileOutputStream m_file1Stream;
private static FileLock m_file2Lock;
private static FileOutputStream m_file2Stream;
public static void getFile1DirectoryLock(File dir) throws IOException {
m_file1Stream = new FileOutputStream(new File(dir.getPath() + File.separator + DirectoryLock.LOCK_FILE_NAME));
FileChannel channel = m_file1Stream.getChannel();
m_file1Lock = channel.tryLock(0, Long.MAX_VALUE, false);
return m_file1Lock;
} 
public static void getFile2DirectoryLock(File dir) throws IOException { 
m_file2Stream = new FileOutputStream(new File(dir.getPath() + File.separator + DirectoryLock.LOCK_FILE_NAME));
FileChannel channel = m_file2Stream.getChannel();
m_file2Lock = channel.tryLock(0, Long.MAX_VALUE, false);
return m_file2Lock;
} 
public static void releaseFile1DirectoryLock() throws IOException { 
if (m_file1Lock != null) {
if (m_file1Stream != null) {
m_file1Stream.close();
m_file1Stream = null;
} // if
m_file1Lock.release();
m_file1Lock = null;
} // if
} 
public static void releaseFile2DirectoryLock() throws IOException { 
if (m_file2Lock != null) {
if (m_file2Stream != null) {
m_file2Stream.close();
m_file2Stream = null;
} // if
m_file2Lock.release();
m_file2Lock = null;
} // if 
} 
}
 
H

HoaX

Top Contributor
Na du schließt den Stream ja auch bevor du den Lock freigibst.
Btw: Einrücken erleichertert das Lesen enorm, außerdem ist da einiges an redundantem Code ...
 
T

tomh89

Mitglied
Hab das jetzt mal so ausprobiert (siehe unten) und wieder eine ClosedChannelException bekommen...

wenn das der Fehler ist wieso hat das dan unter java 1.4 funktioniert und unter 1.6 nicht ist Java nicht abwärtskompatibel?



Java:
import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.nio.channels.FileChannel;

import java.nio.channels.FileLock;

 

public class DirectoryLock {

public static final String LOCK_FILE_NAME = "directory.lock";

private static FileLock m_file1Lock;

private static FileOutputStream m_file1Stream;

private static FileLock m_file2Lock;

private static FileOutputStream m_file2Stream;


public static void getFile1DirectoryLock(File dir) throws IOException {

m_file1Stream = new FileOutputStream(new File(dir.getPath() + File.separator + DirectoryLock.LOCK_FILE_NAME));

FileChannel channel = m_file1Stream.getChannel();


m_file1Lock = channel.tryLock(0, Long.MAX_VALUE, false);

return m_file1Lock;

} 


public static void getFile2DirectoryLock(File dir) throws IOException { 

m_file2Stream = new FileOutputStream(new File(dir.getPath() + File.separator + DirectoryLock.LOCK_FILE_NAME));

FileChannel channel = m_file2Stream.getChannel();


m_file2Lock = channel.tryLock(0, Long.MAX_VALUE, false);

return m_file2Lock;

} 


public static void releaseFile1DirectoryLock() throws IOException { 

if (m_file1Lock != null) {

m_file1Lock.release();

m_file1Lock = null;

if (m_file1Stream != null) {

m_file1Stream.close();

m_file1Stream = null;

} // if


} // if

} 


public static void releaseFile2DirectoryLock() throws IOException { 

if (m_file2Lock != null) {

m_file2Stream.close();

m_file2Stream = null;

if (m_file2Stream != null) {


} // if

m_file2Lock.release();

m_file2Lock = null;

} // if 

} 

}


Danke an alle freundlichen Unterstützer!!!:toll::applaus::toll:
 
M

MvitzExtern

Gast
Folgendes funktioniert bei mir einwandfrei:
Java:
package de.mvitz.examples.java.file.lock;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileLock;

public final class DirectoryLock {

    public static final String LOCK_FILE_NAME = "directory.lock";

    private final File directory;

    private FileOutputStream os;
    private FileLock lock;

    private DirectoryLock(File directory) {
        this.directory = directory;
    }

    public void lock() throws IOException {
        os = new FileOutputStream(new File(directory, LOCK_FILE_NAME));
        lock = os.getChannel().tryLock(0, Long.MAX_VALUE, false);
    }

    public void release() throws IOException {
        if (lock != null) {
            lock.release();
            lock = null;
            if (os != null) {
                os.close();
                os = null;
            }
        }
    }

    public static DirectoryLock create(File directory) {
        return new DirectoryLock(directory);
    }

}
 
T

tomh89

Mitglied
Hab den Fehler gefunden!!!!=)

das File Lock Objekt wurde in einem anseren teil des Programmes geschlossen und konnte daher kein zweites mal geschlossen werden.
Es funktioniert soweit wieder alles ... ich frage mich nur warum das dann jahrelang unter Java 1.4 funktioniert hat (in den release notes habe ich eigentlich nachgesehen...)
kann es eventuell an dem liegen?:

Java SE 6 Compatibility

ORACLE:

# The java.nio.channels.FileLock class checks for files already locked by other FileChannel instances

Java SE 6 throws an OverlappingFileLockException if an application attempts to lock a region that overlaps a region locked through another FileChannel instance. Previous versions did not check for file locks obtained by other FileChannel instances. By default the java.nio.channels.FileChannel.lock method checks if the requested lock overlaps with a region held by this Java virtual machine.

Java SE 6 has added the system property sun.nio.ch.disableSystemWideOverlappingFileLockCheck to control java.nio.channels.FileChannel.lock file checking behavior, as follows:

* If this system property is set (or is set to some value other than false) then java.nio.channels.FileChannel.lock checks for overlapping file locks obtained using this FileChannel instance only. Locks acquired by other FileChannel instances to the same file are not checked.

* If this system property is not set (or is set to the value false) then java.nio.channels.FileChannel.lock checks for overlapping file locks from all FileChannel instances, according to the specification.

The sun.nio.ch.disableSystemWideOverlappingFileLockCheck system property exists to provide compatibility with J2SE 1.4 and 5.0, which do not implement the JVM-wide overlapping file lock check.

Danke an all die Unterstützer:toll::applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
bueseb84 Gleiche Maven Versions in Child Modulen Allgemeine Java-Themen 13
R RXTX Versions Info abschalten Allgemeine Java-Themen 6
U Versions-Konfusion: Ist long kein object? Allgemeine Java-Themen 3
S versions-check Allgemeine Java-Themen 5
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
R Snake Probleme Allgemeine Java-Themen 2
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S Probleme mit Collection Allgemeine Java-Themen 7
L Probleme mit Jar Allgemeine Java-Themen 6
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
S Probleme mit dem filechooser Allgemeine Java-Themen 1
J Comperator Probleme Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme mit Webappplikation Allgemeine Java-Themen 5
L Plötzlich Probleme mit der JVM :( Allgemeine Java-Themen 6
S starke performance probleme des forums Allgemeine Java-Themen 10
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
H Reg Exp Probleme Allgemeine Java-Themen 5
M Classpath Probleme bei JAR Generierung Allgemeine Java-Themen 2
S Probleme mit JAVA-Installation Allgemeine Java-Themen 3
D Probleme bei for-Schleife Allgemeine Java-Themen 4
R Probleme mit Javadoc Allgemeine Java-Themen 2
G Gson Probleme Allgemeine Java-Themen 2
P KI für TicTacToe programmieren > Probleme Allgemeine Java-Themen 2
M Google App Engine macht Probleme Allgemeine Java-Themen 4
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
F 2d array probleme Allgemeine Java-Themen 2
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
T Interface Probleme Allgemeine Java-Themen 8
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
U Probleme mit Kopiervorgang Allgemeine Java-Themen 3
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
S CardLayout Probleme (Zinsrechner) Allgemeine Java-Themen 4
M JVM Probleme JUnit Allgemeine Java-Themen 2
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
K Threads Probleme mit Thread Allgemeine Java-Themen 13
H Probleme beim Erstellen einer txt. Datei Allgemeine Java-Themen 7
M Probleme mit einer .jar Allgemeine Java-Themen 3
P Applet Applet einbinden Probleme Allgemeine Java-Themen 2
H JAVA-ARCHIV-PROBLEME - pls help :( Allgemeine Java-Themen 4
P Probleme mit Generics Allgemeine Java-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben