RandomAccessFile

Status
Nicht offen für weitere Antworten.

Reen

Bekanntes Mitglied
Moin..

Mal ne Frage. Setzt RandomAccessFile den Pointer immer wieder auf Position 0, nachdem in die Datei wieder neu geschrieben wird? Der Zeiger sollte doch eigentlich immer hinter dem letzten aktuellen Eintrag bleiben. Habe nämlich das Prob. das wenn ich ein neues Objekt in eine Datei schreibe immer nur das letzte drin steht. Laut Manpage wird ja die Datei auch nicht neu angelgt, sofern diese schon vorhanden ist. Deshalb schließe ich das schonmal aus, dass das File immer wieder neu angelegt wird.

Danke
Reen
 

Quaxli

Top Contributor
Ohne Blick auf Deinen Code ist das schwer zu sagen. Wenn Du das File jedes Mal neu aufmachst steht der Pointer wieder bei Null.

Poste mal ein bißchen Code, dann läßt sich mehr sagen.
 

Reen

Bekanntes Mitglied
OKi..dann hier mal die Funktion, die das erledigen soll...

Code:
class Kette implements Serializable                                    
	{                                           
	  private static final long serialVersionUID = 1L;
	  
	  public Knoten kopf = new Knoten("kopf");
	  
          private long pointer;
	 	  
	  public Kette() throws FileNotFoundException, IOException                            
	  {                                         
		kopf.vorgaenger = null;
		kopf.naechster = null;
		
	  }                                         


public void fuegeNach(Object neuObj) throws FileNotFoundException, IOException 
	  {   
		  
		  ByteArrayOutputStream ba = new ByteArrayOutputStream();  
		  ObjectOutputStream out = new ObjectOutputStream(ba);
		  RandomAccessFile file = new RandomAccessFile("test.txt", "rw");
		  
		  //ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream( "MyObjs.txt" , true));
		  
		  Knoten aktuellerKnoten = kopf;
		  Knoten akt_vorgaenger  = kopf.vorgaenger;
		  
		  while (aktuellerKnoten != null)                
		    {
		      akt_vorgaenger  = aktuellerKnoten;
		      aktuellerKnoten = aktuellerKnoten.naechster;
		    }
		  
		  Knoten neuKnoten = new Knoten(neuObj);
		  
		  akt_vorgaenger.naechster = neuKnoten;
		  
		  out.writeObject(neuKnoten);
	      out.flush();
	      out.close();
	      
	      byte[] newArray = ba.toByteArray();
	      file.seek(pointer);
	      file.write(newArray);
	      pointer = file.getFilePointer();
	      ba.reset();
	      file.close();
	  }

Also die Funktion nimmt hier ein Objekt entgegen. In meinem Fall eine ArrayList. Das Objekt wird dann in ein ByteArrayStream geschrieben und dann ByteArray soll dann über RandomAccessFile in der Datei positioniert werden. Wenn du sagst, dass der Pointer jedesmal auf Null steht, wenn die Datei neu geöffnet wird, wäre es vllt sinnvoll, die letzte Position zu merken. Prob ist, so wie es jetzt ist, dass der Pointer jedesmal auf Null gesetzt wird, weil ich "seek" nich vor "getFilePointer" setzten kann, ohne den Pointer leer zu lassen.

Wie könnte man's anders lösen?

Danke
Reen

EDIT: Ich habe jetzt die Variable "Pointer" als Klassenvariable mit
Code:
private long pointer;
definiert und rufe diese in der Funktion mit
Code:
file.seek(this.pointer);
auf. Obriger Code wurde abgeändert!!!!
Kann man das so machen oder ist das ehr ein schlechter Programmierstil? Also funktionieren tut's :lol:
 

Quaxli

Top Contributor
Kann ich so nicht sagen, ohne das ganze Konzept zu kennen. Wenn es funktioniert und Du damit zufrieden bist, laß es so.
Wenn Du immer ans Ende der Datei schreibst, bekommst Du auch über die length()-Methode die letzte Position und kannst Dir das mit der pointer-Variable sparen.
 

thE_29

Top Contributor
Ähm.. wo steht den in der API das wenn man eine Datei mit RandomAccessFile aufmacht, das er an der letzten Stelle steht?

Das steht nirgends, von daher "works as implemented"!

Da du jedes mal ein neues Objekt anlegst, steht der immer vorne und überschreibt dir eben so immer alles!

Und wi Quaxli schon sagt, du kannst dir via length() die Länge zurück holen und mit seek hinspringen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
N Randomaccessfile Java Basics - Anfänger-Themen 2
G Wie gebe ich einen Dateipfad in RandomAccessFile an? Java Basics - Anfänger-Themen 2
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
D RandomAccessFile Java Basics - Anfänger-Themen 2
P RandomAccessFile writeInt() und writeChar() Java Basics - Anfänger-Themen 3
L RandomAccessFile liest nicht alle Zeichen Java Basics - Anfänger-Themen 3
D Erste Schritte RandomAccessFile "Leerzeichen" löschen Java Basics - Anfänger-Themen 6
F Kann RandomAccessFile Zip Datei lesen? Java Basics - Anfänger-Themen 14
B Klassen RandomAccessFile Java Basics - Anfänger-Themen 7
B Collections RandomAccessfile & Linkedlist Java Basics - Anfänger-Themen 4
M Frage zur Klasse RandomAccessFile Java Basics - Anfänger-Themen 8
cosmic Frage zu der RandomAccessFile Klasse Java Basics - Anfänger-Themen 6
K RandomAccessFile Java Basics - Anfänger-Themen 4
T RandomAccessFile - Wie schreibe ich etwas in eine txt Datei? Java Basics - Anfänger-Themen 5
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
D text dateien mit RandomAccessFile manipulieren Java Basics - Anfänger-Themen 6
T RandomAccessFile und der Dateipfad Java Basics - Anfänger-Themen 2
J RandomAccessFile löschen Java Basics - Anfänger-Themen 2
M RandomAccessFile Java Basics - Anfänger-Themen 3
G RandomAccessFile, FileChannel, MappedByteBuffer Java Basics - Anfänger-Themen 12
P Datei mit RandomAccessFile einlesen Java Basics - Anfänger-Themen 14
M RandomAccessFile schreibt Sonderzeichen vor String Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
J File, RandomAccessFile File wird größer Java Basics - Anfänger-Themen 8
J RandomAccessFile schreibt falsch Java Basics - Anfänger-Themen 2
G RandomAccessFile Java Basics - Anfänger-Themen 20
R RandomAccessFile und ObjectoutputStream Java Basics - Anfänger-Themen 2
T RandomAccessFile erzeugt seltsame Zeichen Java Basics - Anfänger-Themen 2
P RandomAccessFile Java Basics - Anfänger-Themen 2
L RandomAccessFile und readChar readByte Java Basics - Anfänger-Themen 2
D konvertierungsprobleme bei RandomAccessFile Java Basics - Anfänger-Themen 4
L RandomAccessFile - Prob Java Basics - Anfänger-Themen 4
N RandomAccessFile(File, String) erstellt datei?! Java Basics - Anfänger-Themen 6
B RandomAccessFile Java Basics - Anfänger-Themen 12
M RandomAccessFile liest nur jeden zweiten Wert aus! Java Basics - Anfänger-Themen 8
G RandomAccessFile Java Basics - Anfänger-Themen 2
O RandomAccessFile komisch zeichen Java Basics - Anfänger-Themen 7
A RandomAccessFile Java Basics - Anfänger-Themen 7
B String in ein RandomAccessFile einfügen (bestimmte Position) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben