ERLEDIGT
NEIN
NEIN
ANTWORTEN
20
20
ZUGRIFFE
1292
1292
EMPFEHLEN
-
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?
-
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 ;)
-
04.03.09 14:00 #3
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ß
KlausEs 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 !!
-
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?
GrussKonnte ich dir helfen? Dann würde ich mich über eine prositive Bewertung freuen ;)
----------------------
Pofessional tutorials.de lover ;)
-
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?
-
Hört sich für mich an, als würde intern mit einer Collection gearbeitet und die Datei so oder so eingelesen.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.
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!
-
04.03.09 14:56 #7
Hallo,
nein, es werden logischerweise neue Zeichen hinzugefügt!
Siehe auch das Zitat von Hamment:
So etwas wie "Zeilenweise" gibt es hier á prioiri erstmal nicht!A random access file behaves like a large array of bytes stored in the file system.
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ß
KlausEs 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 !!
-
04.03.09 15:06 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
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.
-
04.03.09 15:25 #10
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" :
Man muss wohl erst die aktuelle Länge auslesen und dann mit "setLength( alt + neu)" richtig setzen.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.
Dann sollte alles wie gewünscht funktionieren ....
Gruß
KlausEs 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 !!
-
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!
-
04.03.09 15:29 #12
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
04.03.09 15:38 #13
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ß
KlausGeä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 !!
-
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!
-
04.03.09 16:20 #15
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ß
KlausGeä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
-
Neue Zeile am Anfang von JTextArea einfügen
Von Angiii im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 28.11.08, 08:49 -
Leerzeichen ersetzen (nicht nur am Anfang und am Ende einer Zeile)
Von crazyPower im Forum PHPAntworten: 6Letzter Beitrag: 08.08.05, 09:08 -
Stream Reader -> Zurück an den Anfang einer Datei springen
Von moson im Forum .NET ArchivAntworten: 3Letzter Beitrag: 13.05.04, 15:07 -
in txt datei sachen am anfang einfügen
Von Brauni im Forum PHPAntworten: 23Letzter Beitrag: 12.05.03, 18:15 -
In Datei ans ende jeder Zeile ein zeichen einfügen?
Von Zerolith im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 15.11.02, 20:17





Zitieren

Login





