einzelne Zeile mithilfe Steams aus Textdatei überschreiben

Status
Nicht offen für weitere Antworten.
E

eiskalterBengel85

Gast
hallo
ich hab eine textdatei und möchte da jetzt immer eine beliebige zeile überschreiben, und zwar mit streams? wie mach ich das?

z.b sieht die textdatei folgendermaßen aus:

q456789 test
andy huber

q999995 test1
martin müller
.
.
.
.

usw.... und ich möchte jetzt z.B. die Zeile die mit q99995 beginnt überschreiben!

wie geht das?
`


gruß martin
 
B

Beni

Gast
Überschreiben ist so eine Sache... mit einem RandomAccessFile kannst du Teile überschreiben, aber du kannst dann keine bytes einfügen.
 

André Uhres

Top Contributor
Die einzige Möglichkeit eine Zeile von variabler Länge in einer Textdatei zu ändern
ist die die Originaldatei zu lesen und den Inhalt mit der geänderten Zeile in eine temporäre Datei zu schreiben.
Dann löschen wir die Originaldatei und benennen die temporäre Datei um in den Originalnamen.
In diesem Beispiel musst du 3 Argumente angeben: Die Datei, den Zeilenschlüssel und den neuen Zeileninhalt:
Code:
   public void replaceLineInFile(File inFile, String lineKey, 
             String lineToBeReplaced)  throws IOException {
        // temp file:
        File outFile = File.createTempFile("temp", null, inFile.getParentFile());
        // input:
        FileInputStream fis  = new FileInputStream(inFile);
        BufferedReader in = new BufferedReader
                (new InputStreamReader(fis));
        // output:
        FileOutputStream fos = new FileOutputStream(outFile);
        PrintWriter out = new PrintWriter(fos);
        String thisLine = "";
        while ((thisLine = in.readLine()) != null) {
            if(thisLine.startsWith(lineKey)) 
                out.println(lineToBeReplaced);
            else 
                out.println(thisLine);
        }
        out.flush();
        out.close();
        in.close();
        inFile.delete();
        outFile.renameTo(inFile);
    }
 
E

eiskalterBengel85

Gast
dankeschön dass sieht schon recht gut aus, nur wenn ich es ausführ kommt eine fehlermeldung vom server.

mein quelltext sieht jetzt so aus:

Code:
public void passwortAndern(File inFile, String qnr, 
             String Eingabe)  throws IOException { 
        // temp file: 
        File outFile = new File("C:/webapps/Amore/src/java/beans/userdaten1.txt"); 
        // input: 
        FileInputStream fis  = new FileInputStream("C:/webapps/Amore/src/java/beans/userdaten.txt"); 
        BufferedReader in = new BufferedReader 
                (new InputStreamReader(fis)); 
        // output: 
        FileOutputStream fos = new FileOutputStream(outFile); 
        PrintWriter out = new PrintWriter(fos); 
        String thisLine = ""; 
        while ((thisLine = in.readLine()) != null) { 
            if(thisLine.startsWith(qnr)) 
                out.println(Eingabe); 
            else 
                out.println(thisLine); 
        } 
        out.flush(); 
        out.close(); 
        in.close(); 
        inFile.delete(); 
        outFile.renameTo(inFile); 
    }

}




und hier die fehlermeldung:

javax.servlet.ServletException: beans.stream.passwortAndern(Ljava/lang/String;Ljava/lang/String;)V
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.ApplicationFields.loggin1_jsp._jspService(loggin1_jsp.java:125)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
org.apache.jsp.Amore_jsp._jspService(Amore_jsp.java:236)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause

java.lang.NoSuchMethodError: beans.stream.passwortAndern(Ljava/lang/String;Ljava/lang/String;)V
org.apache.jsp.ApplicationFields.loggin1_jsp._jspService(loggin1_jsp.java:81)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
org.apache.jsp.Amore_jsp._jspService(Amore_jsp.java:236)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.7 logs.


--------------------------------------------------------------------------------

[Edit by Beni: Codetags]
 
E

eiskalterBengel85

Gast
jetzt klappt es schon fast.
er erstellt mir zwar jetzt eine temp datei, ändert aber nicht die eigentliche userdatei. eigentlich sollte ja dann die temp datei in die userdatei unbenannt werden.

woran kann das liegen?

das ist mein quelltext.
als parameter übergeb ich als infile: "C:/webapps/Amore/src/java/beans/userdaten.txt"





public void passwortAndern(File inFile, String qnr,
String Eingabe) throws IOException {



// temp file:

File outFile = File.createTempFile("temp", null, inFile.getParentFile());
// input:
FileInputStream fis = new FileInputStream(inFile);
BufferedReader in = new BufferedReader
(new InputStreamReader(fis));
// output:
FileOutputStream fos = new FileOutputStream(outFile);
PrintWriter out = new PrintWriter(fos);
String thisLine = "";
while ((thisLine = in.readLine()) != null) {
if(thisLine.startsWith(qnr))
out.println(Eingabe);
else
out.println(thisLine);
}
out.flush();
out.close();
in.close();
inFile.delete();
outFile.renameTo(inFile);
}

}
 

André Uhres

Top Contributor
eiskalterBengel85 hat gesagt.:
als parameter übergeb ich als infile: "C:/webapps/Amore/src/java/beans/userdaten.txt"
Fehlermeldung ?
"C:/webapps/Amore/src/java/beans/userdaten.txt" als Parameter für inFile ist jedenfalls nicht korrekt.
Korrekt wäre:
Code:
new File("C:/webapps/Amore/src/java/beans/userdaten.txt")
 
E

eiskalterBengel

Gast
File a=new File("C:/webapps/Amore/src/java/beans/userdaten.txt");


ja den new operator hab ich schon verwendet. aber trotzdem macht er nix???
du weisst auch nicht mehr woran es liegen kann? bei dir macht er es oder?
 
G

Gast

Gast
und als Aufruf verwende ich:

ST.passwortAndern(a,User1,Hilfe2);

ich mein es kommt ja auch keine fehlermeldung oder so.
er führt alles aus
nur wenn ich am ende in meine ordnerstruktur reinschaue, sehe ich dass die datei userdaten.txt nicht verändert wurde und nur eine neue temp datei erstellt wurde. wenn ich diese dann manuell umändern würde in eine txt datei, würd alles stimmen, mit geändertem pw
 

André Uhres

Top Contributor
Gast hat gesagt.:
und als Aufruf verwende ich:
ST.passwortAndern(a,User1,Hilfe2);
ich mein es kommt ja auch keine fehlermeldung oder so.
Code:
       try {
            ST.passwortAndern(a,User1,Hilfe2);
        } catch (IOException e) {
            e.printStackTrace();// <-- dies ist wichtig (oder eigene Fehlermeldung ausgeben)
        }
 
E

eiskalterBengel

Gast
jo hab ich jetzt hinzugefügt, aber trotzdem ändert er den dateinamen nicht....., sondern erstellt lediglich ein temp file
 

André Uhres

Top Contributor
Oder vielleicht geht der delete nicht.
Propier's mal so:
Code:
       boolean deleteOK = inFile.delete();
        if(!deleteOK){
            System.out.println("Delete error");
        }
PS: beim rename kannste es ähnlich machen.
 
E

eiskalterBengel

Gast
inFile.delete();
outFile.renameTo(inFile);


die 2 zeilen sind hundert pro korrekt oder?
 

André Uhres

Top Contributor
Propier's mal so:
Code:
       boolean deleteOK = inFile.delete();
        if(!deleteOK){
            System.out.println("Delete error");
        }
Beim rename kannste es ähnlich machen.
 
G

Gast

Gast
jo der delete geht nicht, jetzt gibt er "Delete error" aus? was nun? *g*
 
G

Gast

Gast
mhhh ne is nicht geschützt.

aber die userdaten datei besteht ja schon auf meiner festplatte.
kann es damit zusammenhängen dass ich im quellcode sage
File a=new File(C:/....userdaten.txt)
 
G

Gast

Gast
outFile.delete() geht.
also wenn ich das eingebe dann is die erstellte temp datei nicht mehr wie sonst vorhanden! er löscht mir nur die scheiss userdaten.txt nicht, die schon vor programmaufruf besteht...
 
E

eiskalterBengel

Gast
public void passwortAndern(File inFile, String qnr,
String Eingabe) throws IOException {






// temp file:
File outFile = File.createTempFile("temp", null, inFile.getParentFile());

// input:
FileInputStream fis = new FileInputStream(inFile);
BufferedReader in = new BufferedReader
(new InputStreamReader(fis));
// output:
FileOutputStream fos = new FileOutputStream(outFile);
PrintWriter out = new PrintWriter(fos);
String thisLine = "";
while ((thisLine = in.readLine()) != null) {
if(thisLine.startsWith(qnr))
out.println(Eingabe);
else
out.println(thisLine);
}
out.flush();
out.close();
in.close();

boolean deleteOK = inFile.delete();
if(!deleteOK){
System.out.println("Delete error");
}

outFile.renameTo(inFile);


}

hier der programmaufruf:

String User1 = request.getParameter("User1");
String passwort1 = request.getParameter("passwort1");

String Hilfe2=User1+" "+passwort2;
File a=new File("C:/userdaten.txt");

try {
ST.passwortAndern(a,User1,Hilfe2);
} catch (IOException e) {
e.printStackTrace();
}




falls es dir was bringt ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
H Input/Output JTextArea einzelne Zeile auslesen Java Basics - Anfänger-Themen 6
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
X Wie kann ich Zahlen in einzelne Zifferne zerlegen? Java Basics - Anfänger-Themen 3
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
B lanterna einzelne Zeichen aus dem Terminal löschen Java Basics - Anfänger-Themen 0
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
A Variablen String Array in einzelne Strings auspalten Java Basics - Anfänger-Themen 4
J Methoden Einzelne Objekte eines Vectors addieren Java Basics - Anfänger-Themen 10
S Einzelne Buchstaben aus Jtextfield in array Java Basics - Anfänger-Themen 2
R Einzelne Zahlen von der Eingabe (Scan) weiterverarbeiten Java Basics - Anfänger-Themen 3
D Kleinere Positionsangabe als einzelne Pixel bei Image? Java Basics - Anfänger-Themen 28
F Einzelne Werte aus einem Array vergleichen? Java Basics - Anfänger-Themen 8
X String einzelne Buchstaben ersetzen Java Basics - Anfänger-Themen 4
M Einzelne Zeilen nach Zeichen auslesen Java Basics - Anfänger-Themen 4
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
M JTable einzelne Spalte rechtsbündig Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
S Einzelne Werte von Array-Feld löschen Java Basics - Anfänger-Themen 15
N TextZeile in einzelne Strings teilen, die mit Komma getrennt sind Java Basics - Anfänger-Themen 4
A einzelne Zeichen aus String auslesen Java Basics - Anfänger-Themen 3
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R einzelne Bits prüfen Java Basics - Anfänger-Themen 12
H String zerlegen in einzelne Buchstaben (char)?? Java Basics - Anfänger-Themen 7
A Einzelne TeilStrings einfärben Java Basics - Anfänger-Themen 3
S mehrere einzelne klassen in eine datei packen Java Basics - Anfänger-Themen 4
K Datentypen Liste: Einzelne Einträge ändern Java Basics - Anfänger-Themen 2
D Einzelne Ziffern aus einem String Java Basics - Anfänger-Themen 10
B Was für Aufgaben haben die einzelne Entwurfsmuster? Java Basics - Anfänger-Themen 9
C Einzelne Werte eines Arrays ausgeben Java Basics - Anfänger-Themen 2
B Laufzeitverschlechterung durch Auslagerung in einzelne Threads Java Basics - Anfänger-Themen 8
MrMilti einzelne Methoden einer Klasse auslagern Java Basics - Anfänger-Themen 6
T Einzelne Ziffer zusammenfügen (ohne Strings oder Arrays) Java Basics - Anfänger-Themen 2
M einzelne Pixel setzen/auslesen Java Basics - Anfänger-Themen 2
N aus HTML einzelne Inhalte (z.B. Tabelleninhalte) auslesen Java Basics - Anfänger-Themen 10
A Nur einzelne Methode einer anderen Klasse starten Java Basics - Anfänger-Themen 2
G Einzelne Datei im jar verändern ? Java Basics - Anfänger-Themen 5
B Einzelne Zellen in JTable markieren Java Basics - Anfänger-Themen 2
C String.split("") einzelne Positionen abfragen Java Basics - Anfänger-Themen 10
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
R einzelne Zelle einer JTable bearbeiten Java Basics - Anfänger-Themen 2
M Object zu Int Problem, obwohl einzelne Objecte Int sind =( Java Basics - Anfänger-Themen 2
J String - einzelne Zeichen sortieren Java Basics - Anfänger-Themen 14
G Einzelne Zeilen beschreiben Java Basics - Anfänger-Themen 4
F einzelne Buchstaben in JTextField ändern Java Basics - Anfänger-Themen 11
S setCellRenderer für EINZELNE Zelle Java Basics - Anfänger-Themen 9
S Zugriff auf einzelne Buchstaben eines String Java Basics - Anfänger-Themen 16
J Jtable - wie einzelne zelle markieren Java Basics - Anfänger-Themen 8
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
padde479 Zeile entfernen TableModel Java Basics - Anfänger-Themen 11
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
S Gesamten String in einer Zeile ausgeben Java Basics - Anfänger-Themen 2
J ObjectOutputStream writeChars, komische Zeichen nur in 1. Zeile Java Basics - Anfänger-Themen 2
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
L Tiefe Kopie einer Zeile eines zweidimensionalen Arrays Java Basics - Anfänger-Themen 1
B Code Zeile unklar Java Basics - Anfänger-Themen 9
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
F Zeile in Ordner Java Basics - Anfänger-Themen 4
jaleda100 JTextArea Zeile einfügen Java Basics - Anfänger-Themen 1
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Java liest nur eine Zeile ein Java Basics - Anfänger-Themen 3
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben