FileLock

Status
Nicht offen für weitere Antworten.

Sanix

Top Contributor
Hallo,
Ich habe im Internet verschiedene Beispiele für einen Dateilock gefunden. Ich möchte jetzt mittels PrintWriter in die gelockte Datei schreiben (sollte gehen, da ich ja exklusiv Zugriff habe).
Ich weiss nicht genau, wie ich den RandomAccessFile Stream in den PrintWriter kriege:

Java:
			RandomAccessFile raf = new RandomAccessFile(file, "rw");
			lock = raf.getChannel().tryLock();
			raf.write("piep".getBytes());

Java:
			lockFile(report.getFile());
			FileWriter fw = new FileWriter(report.getFile());
			BufferedWriter br = new BufferedWriter(fw);
			writer = new PrintWriter(br);

Wenn ich so locke, kriegt nachher mein Writer keinen Zugriff auf das File. Mit raf.write ist es mühsam zum schreiben, da ich die printf Methode haben möchte.
Ist wohl etwas wirr erklärt aber ich erläutere es gerne genauer :).
 
S

Spacerat

Gast
Möglicherweise genügt es ja schon "tryLock()" durch "tryLock(0L, Long.MAX_VALUE, true)" zu ersetzen.
 

Sanix

Top Contributor
Hmm habs ausprobiert, dann kriege ich trotzdem keinen Zugriff. Das Problem ist wohl, dass ich mittels des RandomAccessFile schreiben muss, welches aber keine praktischen Methoden bietet. Kriege ich das nicht irgend als FileStream oder sowas? So dass ich es mittels PrintWriter benutzen kann?

/edit
Hab noch was probiert, mit dem Ergebnis, dass so der Lock einfach ignoriert wird. Was auch nicht Sinn der Sache ist.

Java:
		File file = new File("c:\\test.txt");
		RandomAccessFile raf = new RandomAccessFile(file, "rw");
		FileLock lock = raf.getChannel().lock();
		PrintWriter pw = new PrintWriter(new FileOutputStream(raf.getFD()));
		pw.println("test");
		pw.close();
		
		raf.write(63);
		lock.release();
	
		raf.close();
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Also... was wir brauchen, ist ein FileChannel, um darauf o.a. "tryLock()" aufzurufen. Durch den Filewriter direkt kommt man aber an einen solchen nicht ran, wohl aber über den FileOutputStream. Also mal folgendes versuchen:
Java:
FileOutputStream fos = new FileOutputStream(filename);
fos.getChannel().tryLock(); // notfalls mit obiger Ersetzung
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos));
Viel glück...:)
 

Sanix

Top Contributor
wow so funktionierts, vielen Dank! Überall wurde das Ganze übers RandomAccessFile gelöst, da nahm ich fälschlicherweise an, dass es nur damit geht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Filelock erkennen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben