Hi,
ich hab ein kleines Programm udn damit ein kleines Problem.
Und zwar ich möchte, dass ein RandomAccessFile Objekt an einer bestimmten Stelle eine Zahl (die allerdings als String gespeichert ist) in eine Datei schreibt. Das Programm findet auch die richtige stelle und schreibt die Zahl auch - allerdings schreibt es davor immer noch ein Leerzeichen. Dies bewrikt aber, dass zuviel überschrieben wird und das darf nicht sein.
Also hier erstmal der Code
Der Text der dann also herauskommen sollte müsste so aussehen: text;text;1;text;...
Es kommt aber text;text; 1ext;... raus.
Meine Idee woran das liegen könnte ist die, dass die Methode writeChar() laut API ja zwei Bytes schreibt, ein ASCII zeichen aber nur aus einem Byte besteht. Wenn das die Ursache ist, stellt sich aber noch die Frage, wie man das Problem lösen kann.
Gibt es also irgendeine Möglichkeit die writeChar()-Methode oder eine gleichwertige zu veranlassen nur ein Byte zu schreiben? Oder einen Zeichensatz zu verwenden, bei dem jedes Zeichen aus 2 Bytes besteht? Oder kann man den 1 Zeichen-String bzw. das Char-Objekt irgendwie in ein einzelnes Byte verwandeln, so dass die Information genauso erhalten bleibt?
Ich wäre super dankbar für hilfreiche antworten.
Jakob
ich hab ein kleines Programm udn damit ein kleines Problem.
Und zwar ich möchte, dass ein RandomAccessFile Objekt an einer bestimmten Stelle eine Zahl (die allerdings als String gespeichert ist) in eine Datei schreibt. Das Programm findet auch die richtige stelle und schreibt die Zahl auch - allerdings schreibt es davor immer noch ein Leerzeichen. Dies bewrikt aber, dass zuviel überschrieben wird und das darf nicht sein.
Also hier erstmal der Code
Code:
public void speichern(){
try{
RandomAccessFile file = new RandomAccessFile(presentLanguage + ".vok", "rw");
//FilePointer auf Voklist setzen
while(true){
if(file.readLine().equals("[voklist]"))
break;
}
int nummer = 0;
while(true){
String zeile = file.readLine();
if(zeile.equals("[/voklist]"))
break;
int pos1 = -1;
for(int i = 0; i<2; i++){
pos1 = zeile.indexOf(";", pos1+1);
}
int length1 = zeile.length();
zeile = zeile.substring(0,pos1+1);
int length2 = zeile.length();
if(zeile.equals(vokabeln[nummer][0]+";"+vokabeln[nummer][1]+";")){
file.seek(file.getFilePointer()-(length1-length2+2));
//Problem: Schreibt Zeichen plus Leerzeichen; ";" wird dabei gelöscht
file.writeChar(vokabeln[nummer][2].charAt(0));
nummer++;
}
}
file.close();
}catch(IOException ie){
}
}
Der Text der dann also herauskommen sollte müsste so aussehen: text;text;1;text;...
Es kommt aber text;text; 1ext;... raus.
Meine Idee woran das liegen könnte ist die, dass die Methode writeChar() laut API ja zwei Bytes schreibt, ein ASCII zeichen aber nur aus einem Byte besteht. Wenn das die Ursache ist, stellt sich aber noch die Frage, wie man das Problem lösen kann.
Gibt es also irgendeine Möglichkeit die writeChar()-Methode oder eine gleichwertige zu veranlassen nur ein Byte zu schreiben? Oder einen Zeichensatz zu verwenden, bei dem jedes Zeichen aus 2 Bytes besteht? Oder kann man den 1 Zeichen-String bzw. das Char-Objekt irgendwie in ein einzelnes Byte verwandeln, so dass die Information genauso erhalten bleibt?
Ich wäre super dankbar für hilfreiche antworten.
Jakob