Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit Java Files exclusive öffnen



Mattburger
11-03-2004, 15:41
Hi ,

hat jemand Erfahrung mit Java und dem exlusiven Schreiben und öffnen von Files ?
Ich hab in den Standardklassen nichts gefunden.

Habt Ihr einen Tip ?

peschmae
11-03-2004, 18:49
Du kannst Methoden natürlich synchronized machen - dann sollte das gehen. Innerhalb deiner App natürlich. Synchronized ist aber langsam...

Ich wüsste nicht davon, dass man auf eventuell vorhandene Sperrmechanismen des OS (gibts unter Linux ja afaik auch nicht, sonst bräuchten ja diverse Programme nicht so komplizierte Dinger mit Dateien anlegen und so...) zurückgreifen könnte.

MfG Peschmä

Tyset
11-03-2004, 19:19
du kannst ja temporäre Dateien anlegen.
Dort kannst du z.B. eintragen das die Datei x.xyz gesperrt ist.
Ist praktisch ein eigenes synchronisized, aber u.u. schneller.

peschmae
11-03-2004, 21:29
Aber die Dateien musst du ja dann auch sichern :)

MfG Peschmä

Mattburger
12-03-2004, 08:51
Das ist alles nicht der renner. Schade ! Dennoch Danke!
hab ich mir aber fast gedacht.

Mein Problem ist das das Programm mehrmals aufgerufen wird und hierbei die gleichen Input und Output-Fiels verwendet werden.
Je nach Laufzeitverhalten enthält das Output-file dann Schrottdaten.

Ich weis, das man das Problem durch verschiedene Files lösen kann, aber.. ach ... sind halt blos ... frust ... di sind zu bl.d. Ich kanns halt nicht ändern.

Wenn ich ein File neme, dann hab ich das problem, das dieses evtl. liegen bleibt und gar nichts mehr geht.
Synchronosieren geht nicht, da es unterschiedliche Prozesse sind.

alterkaempfer
12-03-2004, 09:32
Vielleicht hilft dir dieser Code weiter



import java.io.*;
import java.nio.*;
import java.nio.channels.*;


public class lockfile {

public lockfile() {
}

public static void main(String[] args)
{
try {
// Get a file channel for the file
File file = new File("C:\\testdatei.txt");
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
}

try {
Thread.sleep(100000);
}catch(InterruptedException iex) { }

// Release the lock
lock.release();

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


mfg
alterkaempfer

Mattburger
15-03-2004, 08:14
Hi alterkaemper,

danke für den Tip.
Leider gibt es diese Funktionen erst ab 1.4 und ich habe 1.3 zu unterstützen.
Frust !
Aber eines Tages komme ich bestimmt auf die Lösung zurück.
Danke nochmal
Gruesse
Mike

Bubble
15-03-2004, 19:49
Was bedeutet es, eine Datei exklusiv zu schreiben oder zu Öffnen?
Bubble

peschmae
15-03-2004, 21:18
Nun eben exklusiv halt.

Deine App ist zu dem Zeitpunkt die einzige die auf die Datei zugreifen kann. Wichtig ist das z.B. bei Mailservern - wenn postfix nach /var/mail/peschmae schreibt sollte möglichst nicht gleichzeitig noch mutt an der Datei rumfummeln (z.B. zum löschen)

MfG Peschmä