Archiv verlassen und diese Seite im Standarddesign anzeigen : FileWriter im J2SE v1.41_01
Hallo erstmal,
ich habe ein ganz kleines Problem.
Ich würde gerne einige werte zeile für zeile in eine Textdatei eintragen lassen, aber jedesmal, wenn ein neuer eintrag folgen soll, dann überschreibt er mir gleich die ganze datei.
try{
boolean last = false;
String line;
int i = 0;
while(!last){
line = fileIn.readLine();
i += 1;
fileIn.mark(i); if (line == null){
fileOut.write(param, 0, param.length()); fileOut.close(); out.println(hostFile.length()); out.println("all done");
last = true;
}
}catch(IOException e){
e.printStackTrace();
out.println("Something went wrong");
}
}
}
ich verzweifle noch daran,
vieleich hat ja jemand vo euch ne idee wie ich das lösen könnte?
euer hpf
BUTTON
hi,
kenn mich eigentlich nicht wirklich mit FileWriter aus, aber es scheint so als läge der Fehler hier :
fileOut.write(param, 0, param.length());
du schreibst doch hier ab Offset 0 den parameter 'param' in die Datei , so dass du jedes mal den Anfang "überschreibst" (oder liege ich da falsch ?)
mfg
maceop
hiho, ich habs geschafft :)
@maceop
fileOut.write(param, 0, param.length());
die werte hinter meinem String param, sind der start- und endcurser
innerhalb des zu schreibenden strings (also ich fange mit zeichen 0 von
param an und höre mit dem letzten zeichen auf)
es lag an der erzeugung des Writers:
Vorher(immer eine neue Datei):
fileOut = new BufferedWriter(new FileWriter(hostFile)
Nachher(ans ende der bisherigen):
fileOut = new BufferedWriter(new FileWriter(hostFile, true)
euer hpf
anda_skoa
18-03-2003, 14:18
Je nachdem wie das Programm aufgebaut ist, ist es vielleicht effizienter, wenn man den Stream nur einmal öffnet und erst am Ende wieder schliesst.
Ciao,
_
@ anda_skoa
das programm schreibt nur eine textzeile in die datei, danach ist dessen thread-lifecycle vorbei :) ist nix besonders großes
hpf
anda_skoa
18-03-2003, 15:04
Original geschrieben von hpf
@ anda_skoa
das programm schreibt nur eine textzeile in die datei, danach ist dessen thread-lifecycle vorbei :) ist nix besonders großes
Ah, sah durch die while Schleife wie ein wiederkehrender Vorgang aus.
Vielleicht kannst du dein erstes Posting nochmal editieren und den Code innerhalb von Codetags (# Button) formatieren.
Ciao,
_
da hab ich aber noch eine fage.
und zwar, kann man auch einzelne zeilen innerhalb einer textdatei löschen, wenn ich die textdatei zeile für zeile auslese ????
Das ganze ding soll nämlich später meine IP in einem Nameserver binden,
dabei wäre es schlecht wenn einträge "doppelt"(2 mal der gleiche name mit unterschiedlicher IP) auftauchen würden, dass könnte den Bind wahrscheinlich auf die dauer gut stressen :)
hpf
Für den Zugriff auf verschiedene Stellen in einer Datei, gibt es auch ein RandomAccesFile, weiß jetzt allerdings gerade nicht die Stelle in der Klassehierarchie.
fs111
ich hab mir das mal angesehen, aber ich denke nicht, dass ich das damir hinbekomme :( es gibt keine methode um einen String zu schreiben, nur Bytes getrennt durch ein oder (|), oder imt utf format, aber dann hängt der mir noch ein $remote vor den string. :(
und was ist hiermit?
writeChars
public final void writeChars(String s)
throws IOException
Writes a string to the file as a sequence of characters. Each character is written to the data output stream as if by the writeChar method. The write starts at the current position of the file pointer.
Specified by:
writeChars in interface DataOutput
Parameters:
s - a String value to be written.
Throws:
IOException - if an I/O error occurs.
See Also:
writeChar(int)
Ich meine, es sollte ja keinen Unterschied machen, ob er das geschriebene als chars oder als String behandelt. Außerdem kannst Du mit writeBytes auch Strings in eine Textdatei schreiben, das habe ich schon gemacht, und funktioniert super.
Der Code sieht dabei so aus:
fs111
private void saveHighscore(String s)
{
{
try
{
RandomAccessFile f1 = new RandomAccessFile("highscore.txt", "rw"); //creating a new RandomAccessFile
f1.seek(f1.length()); //this special feature of a RandomAccessFile finds the last bit of our file and puts the pointer to it
f1.writeBytes(s);//writes the passed bytes to the end of the file
f1.close(); //closes the RandomAccessFile
}
catch (IOException e) //we have to catch IOExceptions
{
System.out.println("Fehler beim Erstellen der Datei"); //displays an error message on the shell
}
}
}
peschmae
18-03-2003, 19:14
fs111 is back :) :D :D :D
das geht so wie beschrieben, aber
kann man auch einzelne zeilen innerhalb einer textdatei löschen, wenn ich die textdatei zeile für zeile auslese ????
wie geht das löschen :confused: :confused:
das habe ich früher auch schon ellenlang versucht bzw gesucht. Auch das Einfügen von Chars/Strings scheint irgendwie nicht möglich. Fehlt das in der API?
MfG Peschmä
ich kriega das damit nicht hin :(
lesen und schreiben klappt ja, aber ich kann immer noch nicht löschen :(
euer hpf
anda_skoa
18-03-2003, 19:55
Ich würds so machen.
Datei öffnen.
mit File.createTempFile eine temporäres File öffnen.
Aus der Datei zeilenweise lesen und nur neue ins Tempfile schreiben.
Datei schliessen.
Tempfile mit File.renameTo in Datei umbenennen.
Ciao,
_
danke, das ist ne gute idee.
ich werde das morgen mal ausprobieren :)
hpf
Hmm, man könnte sicherlich auch die Datei zeilenweise auslesen, und in eine Vector schreiben, in diesem dann doppelte Einträge suchen, und alles wieder in die Datei schreiben, aber das ist bestimmt sziemlich teuer, weil ja zimelich viele Stringoperationen vorgenommen werden müssen.
fs111
so, ich habe es nun hinbekommen, dass ich eine 2. datei habe, in der nun alle "einzigartigen" einträge aus datei 1 stehen. aber ich hab das gefühl, dass ich nur zu dämlich zum umbenennen bin :(
ich wollte es mit dieser Codezeile bewerkstelligen(der compiler meldet keine fehler):
hostFile.renameTo (new File"C:\\temp\\eclipse\\workspace\\netTest\\org\\hpf\\n etTest\\Server\\tmp.tmp"));
aber da tut sich nix :(
anda_skoa
19-03-2003, 11:25
Ist hostFile das Temp File?
Ich hab mit das in etwa so gedacht:
File ausgangsdatei
File tmpFile;
// kopierere eindeutige Einträg von ausgangsDatei in tmpFile
ausgangsDatei.delete();
tmpFile.renameto(ausgangsDatei);
Ciao,
_
peschmae
19-03-2003, 14:48
und irgendwas zum löschen/einfügen in Dateien gibts wirklich nicht?
MfG Peschmä
Also ich habe das immer so gemacht:
Ganze Datei einlesen: bei bekannter Größe in ein Stringarray, bei unbekannter in einen Vector, leeren String in die Datei geschrieben, und dann alles mit Veränderungen wieder rein geschrieben. Eine bessere Variante kenn ich nicht.
fs111
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.