tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
1292
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Hallo,

    ich bin nun schon etwas länger am suchen und wollte hier nochmal nachfragen, ob es eine Möglichkeit gibt, am Anfang einer Datei eine Zeile einzufügen, ohne, dass der bisherige Inhalt überschrieben wird.
    Möglich ist natürlich, die ganze Datei auszulesen, am Anfang einen String hinzuzufügen und dann die Datei neu zu schreiben, nur habe ich bis zu 1000 Threads die gleichzeitig schreiben und da wird das nicht allzu performant sein befürchte ich.

    Gibts da in Java was?
     

  2. #2
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    Hi
    Die Windows API liefert das (meines Wissens) nicht - Somit Java auch nicht. Es kann also nur an eine Datei etwas angehängt werden.
     
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von jeipack Beitrag anzeigen
    Die Windows API liefert das (meines Wissens) nicht - Somit Java auch nicht. Es kann also nur an eine Datei etwas angehängt werden.
    Hallo,

    das stimmt so nicht wirklich
    Es gibt die Klasse RandomAccessFile, über die man wahlfrei zugreifen kann, also auch am Anfang der Datei.
    Eine ausführliche Erklärung findet ihr hier:
    http://www.dpunkt.de/java/Programmie...treams/14.html

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    jeipack jeipack ist offline Mitglied Brokat
    Registriert seit
    Feb 2007
    Beiträge
    391
    Oh Danke für die Korektur

    Ich habe mich sogar noch gefragt ob ich das so schreiben soll. Das mit der Windows API habe ich mal ihrgendwo gelernt (Hoffe das ich das richtig gelernt hab/noch aktuell ist) und habs dann einfach auf Java portiert, da diese ja auch wieder auf die API zugreifft.

    Weisst du wie die RandomAccessFile intern arbeitet?


    Gruss
     
    Konnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)

    ----------------------
    Pofessional tutorials.de lover ;)

  5. #5
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Aber beim RandomAccessFile verändert er aber doch nicht die länge der Datei oder?
    Wenn ich da in Zeile 1 eine neue Zeile einfüge dann ist die alte Zeile 1 doch gelöscht oder kann ich die einfach nach unten schieben?
    Weil wenn das nicht geht müsste ich ja, um alle Daten zu behalten, wieder die Datei erst einlesen, den String anfügen und die Datei wieder schreiben oder?
     

  6. #6
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Instances of this class support both reading and writing to a random access file. A random access file behaves like a large array of bytes stored in the file system. There is a kind of cursor, or index into the implied array, called the file pointer; input operations read bytes starting at the file pointer and advance the file pointer past the bytes read. If the random access file is created in read/write mode, then output operations are also available; output operations write bytes starting at the file pointer and advance the file pointer past the bytes written. Output operations that write past the current end of the implied array cause the array to be extended. The file pointer can be read by the getFilePointer method and set by the seek method.
    Hört sich für mich an, als würde intern mit einer Collection gearbeitet und die Datei so oder so eingelesen.

    Also kannst du, wenn du eine Zeile nur an den Anfang setzen willst, gleich die alte Datei einlesen und eine neue erstellen (auf Basis einer temporären Datei).
     
    Handlanger des Dr. Ex1tus

    Ich kenne Matzes dunkles Geheimnis ! oO

    o
    L_/
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.

    Hallo Nuray!

  7. #7
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von 00d4vid Beitrag anzeigen
    Aber beim RandomAccessFile verändert er aber doch nicht die länge der Datei oder?
    Wenn ich da in Zeile 1 eine neue Zeile einfüge dann ist die alte Zeile 1 doch gelöscht oder kann ich die einfach nach unten schieben?
    Hallo,

    nein, es werden logischerweise neue Zeichen hinzugefügt!
    Siehe auch das Zitat von Hamment:
    A random access file behaves like a large array of bytes stored in the file system.
    So etwas wie "Zeilenweise" gibt es hier á prioiri erstmal nicht!

    Lies Dir meinen Link von oben durch resp. diese Referenz:
    http://www.dpunkt.de/java/Referenz/D...ava.io/63.html

    Die Verwendung sollte dann etwa so laufen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    RandomAccessFile rafOutPut = null;
                             
    int iLaenge = strRes.length();
    byte[] Buffer = new byte[256];
                                 
    for( int k = 0; k < iLaenge; k++ )
    {
        Buffer[k] = (byte)strRes.charAt( k );
    }
     
    try
    {
        rafOutPut = new RandomAccessFile( "Meine_tolle_Datei.txt" , "rw" );
         rafOutPut.seek( rafOutPut.length() );
         rafOutPut.write( Buffer, 0, iLaenge);
        // void java.io.RandomAccessFile.write(byte[] b, int off, int len)
        // Writes len bytes from the specified byte array starting at offset off to this file. 
        // Parameter:
        // b the data.
        // off the start offset in the data.
        // len the number of bytes to write.
        // Löst aus:
        // IOException if an I/O error occurs.
    }

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Hallo,

    nein, es werden logischerweise neue Zeichen hinzugefügt!
    Das glaube ich eher nicht. Laut der JavaDoc wird das interne "Array" nur erweitert wenn über das Ende hinausgeschrieben wird. Also logischerweise werden anderenfalls die Zeichen nur überschrieben.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Ich probiers mal aus. Danke.
    Wenn das so geht wie vfl_freak geschrieben hat dann ist es super, wenn nicht dann bleibt mir wohl nix anderes übrig zu testen, ob es bei meinem Tool performant läuft wenn ich das mit Datei einlesen - String vorne anfügen - Datei neu schreiben mache.
     

  10. #10
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Hallo deepthroat

    ich glaube, wir haben beide irgendwie Recht

    Ich finde die Stelle zwar in meinen Sourcen derzeit nicht, aber diesen Ausschnitt aus dem schönen Buch "Java ist auch eine Insel" :
    13.2.4 Die Länge des RandomAccessFile

    Mit zwei Methoden greifen wir auf die Länge der Datei zu: einmal schreibend verändernd und einmal lesend.

    * long length() throws IOException Liefert die Länge der Datei. Schreibzugriffe erhöhen den Wert, und setLength() modifiziert ebenfalls die Länge.
    * void setLength( long newLength ) throws IOException Setzt die Größe der Datei auf newLength. Ist die Datei kleiner als newLength, wird sie mit unbestimmten Daten vergrößert; wenn die Datei größer war als die zu setzende Länge, wird die Datei abgeschnitten. Dies bedeutet, dass der Dateiinhalt mit setLength(0) leicht zu löschen ist.
    Man muss wohl erst die aktuelle Länge auslesen und dann mit "setLength( alt + neu)" richtig setzen.

    Dann sollte alles wie gewünscht funktionieren ....

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  11. #11
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Ja das besagt doch aber nur, dass due die Länge der Datei ändern kannst, nicht, dass alles bei einer Änderung automatisch verschoben wird.
    Das was du zitiert hast, hat deepthroat mit seiner Aussage beschrieben.
     
    Handlanger des Dr. Ex1tus

    Ich kenne Matzes dunkles Geheimnis ! oO

    o
    L_/
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.

    Hallo Nuray!

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Man muss wohl erst die aktuelle Länge auslesen und dann mit "setLength( alt + neu)" richtig setzen.

    Dann sollte alles wie gewünscht funktionieren ....
    Das glaube ich erst wenn ich es sehe

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  13. #13
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Jungs, jetzt habt ihr mich verunsichert - und das tut mit so 'nemn alten Sack wie mir nicht

    Wie gesagt, ich finde leider die Stelle in meinem Sourcen nicht wieder, wo damit mal experimentiert hatte. Ist wohl wieder rausgeflogen - who knows why

    Es kann natürlich auch sein, dass ich mir dann zuerst noch den Rest der Datei ab Pos. X eingelesen und nach dem Schreiben (und vorherigem Längenanpassen) hinten wieder angehängt habe .....

    Ach, ich werde alt - ist aber auch schon weit über ein Jahr her ....

    Gruß
    Klaus
    Geändert von vfl_freak (04.03.09 um 15:40 Uhr) Grund: Grammatik ;-)
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  14. #14
    Avatar von hammet
    hammet hammet ist offline himekishi
    Registriert seit
    Aug 2006
    Ort
    Bayern
    Beiträge
    334
    Zitat Zitat von vfl_freak Beitrag anzeigen
    Jungs, jetzt habt ihr mich verunsichert - und das tut mit so 'nemn alten Sack wie mir nicht

    Wie gesagt, ich finde leider die Stelle in meinem Sourcen nicht wieder, wo damit mal experimentiert hatte. Ist wohl wieder rausgeflogen - who knows why

    Es kann natürlich auch sein, dass ich mir dann zuerst noch den Rest der Datei ab Pos. X eingelesen und nach dem Schreiben (und vorherigem Längenanpassen) hinten wieder angehängt habe .....

    Ach, ich werde alt - ist aber auch schon weit über ein Jahr her ....

    Gruß
    Klaus
    Das wäre möglich. Aber da ja an die erste Zeile etwas angehängt werden soll wird dann die gesamte Datei neu eingelesen und dann brauch ich auch keine RAF benutzen
     
    Handlanger des Dr. Ex1tus

    Ich kenne Matzes dunkles Geheimnis ! oO

    o
    L_/
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.

    Hallo Nuray!

  15. #15
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Ach, stimmt, er wollte immer NUR zu Beginn einfügen - das hatte ich ein wenig aus den Augen verloren ich sach' ja - das Alter

    Ok, dann wäre der RAF in der Tat wohl eher flüssiger als flüssig .....

    Wobei mich die gerade auch die anfangs erwähnten "1000 Thread, die gleichzeitig schreiben" etwas irritieren! Ich hoffe, nicht alle in die gleiche Datei, denn dann würde es wohl eh' recht finster

    Gruß
    Klaus
    Geändert von vfl_freak (04.03.09 um 16:20 Uhr) Grund: ein Dreher ...
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

Ähnliche Themen

  1. Neue Zeile am Anfang von JTextArea einfügen
    Von Angiii im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 28.11.08, 08:49
  2. Antworten: 6
    Letzter Beitrag: 08.08.05, 09:08
  3. Antworten: 3
    Letzter Beitrag: 13.05.04, 15:07
  4. in txt datei sachen am anfang einfügen
    Von Brauni im Forum PHP
    Antworten: 23
    Letzter Beitrag: 12.05.03, 18:15
  5. In Datei ans ende jeder Zeile ein zeichen einfügen?
    Von Zerolith im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 15.11.02, 20:17