RandomAccessFile - Prob

Status
Nicht offen für weitere Antworten.

leec1984

Mitglied
Also hier erstmal der Codeausschnitt:

Datei: Person.java
Code:
/****** Datenbank Befehle: start  ******/
void database() throws IOException
{
  RandomAccessFile f = new RandomAccessFile("database.dat", "rw");
  f.seek(getID());
  f.writeInt(getID());
  f.writeInt(getKennnummer());
  f.writeUTF(getName());
  f.writeUTF(getVorname());
  f.writeInt(getAlter());
  f.close(); 
}
/****** Datenbank Befehle: beenden  ******/

Hier der dazugehörige Aufruf!
Datei: Verwaltung.java

Code:
	// Studenten in ein Array schreiben..per Schleife..
	Person[] student = new Person[j];
	for (int k = 0; k < student.length; k++) {
			student[k] = new Person();
			fortNumber.beUpdate();
			student[k].setID(i);
			student[k].setData();
			student[k].databaseRead();
			i++;
			fortNumber.setID(i);}

Die erzeugung des RandomAccessFile in Personen. java, wird per setData() in der Verwaltung.java aufgerufen.
Nun habe ich ein prob.! Undzwar erstellt er die Datei "database" schön und der Pointer funktioniert auch wie er soll, doch bei jedem neuem durchlauf in der Verwaltung.java wird die Datei database überschrieben. Dabei sollte er die Daten "hinten ranhängen"....Aber warum?? Die Modes sind doch gesetzt. Und wie bei FileWriter oder FileOutputStream (mit append) kann ich es ja nicht machen...

Das kotzt mich einwenig an, denn wenn das klappt würde es die Vollendung meiner Vorbereitung bedeuten.
 

Murray

Top Contributor
Du steuerst die Position, ab der geschrieben wird, ja explizit mit seek; es hängt also bei Dir von getID() ab, wo geschrieben wird. Soll das wirklich so sein?

Besser wäre wohl:
Code:
  RandomAccessFile f = new RandomAccessFile("database.dat", "rw");
  f.seek( f.length())
  f.writeInt(getID());
 

leec1984

Mitglied
jup soll so sein..Und es klappt ja auch...Wenn der Pointer bei getID() die Nummer 123 bekommt, dann schreibt er hallt die Daten da hoch. Und wenn ich dann die Datei auslesen will und die ID 123 dann geht der Pointer da hoch und ich bekomme alle dazugehörigen Datensätze..Ich hoffe konnte mein anliegen rüberbringen.

Code:
/****** Datenbank lesen: start  ******/
void databaseRead() throws IOException
{
  RandomAccessFile f = new RandomAccessFile("database.dat","r");
  f.seek(getID());
  System.out.println("******************************");
  System.out.println("\tDatabase-ID:");
  System.out.println("\t" + f.readInt());
  System.out.println("");
  System.out.println("\tKennummer:");
  System.out.println("\t" + f.readInt());
  System.out.println("");
  System.out.println("\tName:");
  System.out.println("\t" + f.readUTF());
  System.out.println("");
  System.out.println("\tVorname:");
  System.out.println("\t" + f.readUTF());
  System.out.println("");
  System.out.println("\tAlter:");
  System.out.println("\t" + f.readInt());
  System.out.println("******************************\n");
  f.close();
}


Aber wie gesagt, dass Problem ist dass die Datei jedesmal überschrieben wird. Und somit alle vorherigen Stellen gelöscht werden...Und dass verstehe ich nicht. Wenn ich vorher die Stelle 122 beschreiben lies, so konnte ich Sie auslesen. Will ich nun nen neuen Datensatz machen mit ID 123 (somit geht Pointer auf Stelle 123 <- wegen getID() ) so kann ich die Stelle 123 auslesen. Aber Stelle 122, die vorher noch ging, ist weg.

EDIT: Ihr Variente funktioniert...Daher er schreibt nicht mehr über...Danke...

EDIT2: Hab ne Idee warum es nicht ging. ID ist bei mir ein Integer. Und die seek() verlangt aber long. So wie length() hat. Daher werde ich mal ID zu einem long machen uns sehen ob es geht.
 

Murray

Top Contributor
seek positioniert eben nicht irgendwie abstrakt auf eine Art Datensatznummer (wo soll die auch herkommen), sondern an ein bestimmtes Byte in der Datei. Wenn man seek(122) macht und dan z.B. 50 Byte an Daten schreibt, dann ist die Datei hinterher 182 Zeichen lang. Wenn man wieder seek(122), dann kann man die Daten mit dem geposteten Code auslesen.
Wenn man dann aber seek( 123) macht und einen neuen Satz von wieder 50 Bytes Daten schreibt, dann ist Datei hinterher 183 Zeichen lang, und vom zuletzt geschriebenen Satz ist nur noch das erste Byte übrig.

Daher wird es auch nicht so einfach möglich sein, einen einzelnen Satz, von dem man nur die ID kennt, in der Datei zu lesen oder zu aktualisieren - das kann alles nur dann wirklich funktionieren, wenn man Datensätze fester Länge hat.
 

leec1984

Mitglied
Ok, jetzt bin ich wieder schlauer. Es ging auch nicht so, wie ich mir dass dachte. Naja. Dann werd ich mal nachlesen wie Datensätze in eine feste länge bringe.
 
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 Java Basics - Anfänger-Themen 4
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
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
F Erste Schritte Hausaufgaben-Prob. - Iterative Prog. Zahlen aufsummieren, wenn durch k>0 teilbar. Java Basics - Anfänger-Themen 5
H Kleines Prob Java Basics - Anfänger-Themen 5
K Erste Schritte prob mit DefaultListModel (string) Java Basics - Anfänger-Themen 8
K Erste Schritte prob anzeige Java Basics - Anfänger-Themen 4
F Button array prob Java Basics - Anfänger-Themen 7
K Prob. mit einer Fehlermeldung Java Basics - Anfänger-Themen 7
S OOP ArrayList Klasse nachbauen, prob mit remove Java Basics - Anfänger-Themen 5
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
J Doppelte Integer aus einem Array entfernen - seltsames Prob. Java Basics - Anfänger-Themen 5
G hibernate . tutorial prob . Java Basics - Anfänger-Themen 4
S prob mit add in einer arry list Java Basics - Anfänger-Themen 13
G taschrechner prob Java Basics - Anfänger-Themen 2
A Connection Prob Java Basics - Anfänger-Themen 3
F prob beim positionieren eines banners Java Basics - Anfänger-Themen 4
N Array-Prob Java Basics - Anfänger-Themen 6
K Prob mit java.util.regex.matches-String wird nicht erkannt? Java Basics - Anfänger-Themen 9
K prob mit einer matrix.ha Java Basics - Anfänger-Themen 34
G Erklärungs Prob Java Basics - Anfänger-Themen 15
T Quersummen Prob. Java Basics - Anfänger-Themen 4
javafreak1986 Util.class Prob Java Basics - Anfänger-Themen 8
G nen virus oder nen prob mit java Java Basics - Anfänger-Themen 3
M Prob bei JTextArea auf .setEditable(false) setzen Java Basics - Anfänger-Themen 2
G mal wieder Prob mit Jar-File Java Basics - Anfänger-Themen 16
T Prob. Interface und Paramter Java Basics - Anfänger-Themen 5
E 2 Prob.:"ArrayIndexOutOfBoundsException" & do- Java Basics - Anfänger-Themen 2
Z prob beim erstellen eines jar files mit eclipse Java Basics - Anfänger-Themen 4
G kleines Prob bei "net send" programm Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben