Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 19

Thema: FileWriter im J2SE v1.41_01

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62

    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
    Code:
    BUTTON
    Geändert von hpf (18-03-2003 um 15:39 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.10.2002
    Beiträge
    148
    hi,
    kenn mich eigentlich nicht wirklich mit FileWriter aus, aber es scheint so als läge der Fehler hier :

    Code:
    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

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    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

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    @ anda_skoa
    das programm schreibt nur eine textzeile in die datei, danach ist dessen thread-lifecycle vorbei ist nix besonders großes

    hpf

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    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

  8. #8
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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

  9. #9
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    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.

  10. #10
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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
    Code:
     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
                }
            }
        }

  11. #11
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    fs111 is back

    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

    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ä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  12. #12
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    ich kriega das damit nicht hin
    lesen und schreiben klappt ja, aber ich kann immer noch nicht löschen

    euer hpf

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    12.03.2003
    Ort
    Delligsen
    Beiträge
    62
    danke, das ist ne gute idee.
    ich werde das morgen mal ausprobieren
    hpf

  15. #15
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •