tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von SE
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
512
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    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

    Code :
    1
    2
    
    java.nio.channels.NonWritableChannelException
        at sun.nio.ch.FileChannelImpl.lock(FileChannelImpl.java:773)
    bekomme ich wenn ich beim channel.look
    Code :
    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);
    bei dieser variante, wenn ich lock(0,Long.MAX_VALUE,true) mache wird die datei nicht gesperrt und alle threads können lesen

    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
     

  2. #2
    SE 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.
    wakoz bedankt sich. 

  3. #3
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    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

  1. Dateizugriff
    Von starbuck86 im Forum Java Grundlagen
    Antworten: 16
    Letzter Beitrag: 01.10.08, 14:01
  2. Dateizugriff
    Von sunflower84 im Forum PHP
    Antworten: 9
    Letzter Beitrag: 22.11.07, 11:45
  3. Dateizugriff feststellen per php
    Von Astror Enales im Forum PHP
    Antworten: 8
    Letzter Beitrag: 14.07.07, 13:51
  4. [Java] Dateizugriff
    Von Dario Linsky im Forum Java
    Antworten: 9
    Letzter Beitrag: 26.06.03, 13:04
  5. dateizugriff
    Von zorac im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 16.07.01, 15:47