-
Moinsen,
ich würde gerne ein paar Threads auf einen ordner los lassen und dort files auslesen, nur ist es blöde wenn jeder Thread die selbe datei einliest.
Ich dachte mir so was wie File lock oder so aber leider bekomme ich das nicht hin
bekomme ich wenn ich beim channel.lookCode :1 2
java.nio.channels.NonWritableChannelException at sun.nio.ch.FileChannelImpl.lock(FileChannelImpl.java:773)
bei dieser variante, wenn ich lock(0,Long.MAX_VALUE,true) mache wird die datei nicht gesperrt und alle threads können lesenCode :1 2 3 4 5 6
XMLReader xmlReader = XMLReaderFactory.createXMLReader(); fileInputStream = new FileInputStream(file); FileChannel channel = fileInputStream.getChannel(); lock = channel.lock(0,Long.MAX_VALUE,false);

ich stehe gerade auf dem schlauch, oder muss ich den xml reader weiter laden bis ich locken darf/kann?
ich möchte aber auf keinen fall schreiben, oder so!
Die Threads sollen alle nur Lesen wobei die Thread steuerung selber vom lesen nichts weiß und wissen soll, für die threads ist das nur ne methode die durchlaufen wird und ein return value hat.
help
-
14.09.11 17:39 #2SE Tutorials.de Gastzugang
Da hast du gleich einen dicken Fehler :
du holst dir einen Channel von einem InputStream ... folglich öffnet Java das File im read-only-Modus ... und genau das ist es wesshalb du keinen FileLock setzen kannst ... denn dafür brauchst du den read-write-Modus.
Auch ist die Art und Weise wie du dir den FileLock holst nicht gerade sauber ...
Versuch doch mal das hier :
! ACHTUNG ! Java 7 ! Der folgende Code ist für Java 7 geschrieben ...
Code java:1 2 3 4 5 6
File file=new File("/absoluter/Pfad/zur/Datei.ext"); // java.io.File - Objekt für Datei erzeugen Path path=file.toPath(); // java.nio.file.Path - Objekt erzeugen FileChannel fileChannel=FileChannel.open(path, StandardOpenOption.valueOf("WRITE")); // java.nio.channels.FileChannel - Objekt über Instanz-Methode erzeugen FileLock fileLock=fileChannel.tryLock(); // FileLock über das gesamte File versuchen - vorteil : tryLock() blockiert nicht und returned immer ohne Exception if(fileLock==null) // prüfen ob FileLock erfolgreich erstellt werden konnte - wenn NULL : File bereits gelockt // TO-DO : Info : File bereits gelockt
Wie gesagt : diese Variante benötigt unbedingt Java 7 da sie auf das neue Paket java.nio.file zugreift ...
Eine Lösung für Java 6 dürfte ich aber auch noch irgendwo haben.
-
Das ist ja doof, ich will die Datei lesen und kann den zugriff nicht beschränken weil ich nur lesen will :/
Also wenn ich nur die Zeichen (Bites) so lesen würde, dann könnte ich den Randomaccessfile nehmen
aber mit einem XML Stream den ich daraus machen möchte geht das leider nicht.
naja danke
PS ich habe sensüchtig auf Java 7 gewartet, aber nun schaffe ich nicht (zeitlich) es zu installieren und zu nutzen
Geändert von wakoz (15.09.11 um 08:01 Uhr) Grund: PS
Ähnliche Themen
-
Dateizugriff
Von starbuck86 im Forum Java GrundlagenAntworten: 16Letzter Beitrag: 01.10.08, 14:01 -
Dateizugriff
Von sunflower84 im Forum PHPAntworten: 9Letzter Beitrag: 22.11.07, 11:45 -
Dateizugriff feststellen per php
Von Astror Enales im Forum PHPAntworten: 8Letzter Beitrag: 14.07.07, 13:51 -
[Java] Dateizugriff
Von Dario Linsky im Forum JavaAntworten: 9Letzter Beitrag: 26.06.03, 13:04 -
dateizugriff
Von zorac im Forum Flash PlattformAntworten: 1Letzter Beitrag: 16.07.01, 15:47



1Danke


Zitieren
Login





