Input/Output bestimmte Zeilen in .txt Dateinen überschreiben

BennIY

Mitglied
Guten Abend Community,

Ich bin imsteiger von C# und muss nun gezwungenermaßen auf Java umsteigen kann mich aber nicht mit Konsolenanwendungen rumdrücken.

Ich muss Dateien erstellen und bestimmte Elemente überschreiben dies kann so aussehen:

Name=BennIY
Rang=3
Bezeichnun=Variable

Nun muss ich wenn noch nicht existierend die Bezeichnung in eine .txt schreiben, und öfter die Variable im scrip abspeichern. Wie kann ich diese Zeile selektieren und alles hinterm "=" überschreiben und speichern?

Wie kann ich alles hinterm "="zeichen in eine variable speichern?

Zum Thema Laden und Speichern google ich schon 2-3h es gibt aber noch viele offene Fragen.
Mir geht es hauptsächlich um das auswählen der Zeile und das Überschreiben des Textes. Gibt es dazu Funktionen oder Codeschnippsel villeicht auch Stichwörter die ich googlen kann um bessere Ergebnisse zu finden ?
 
Du hast I/O Java gegoogelt und nichts Sinnvolles für dich gefunden? Kann ich mir kaum vorstellen. Wie auch immer, du brauchst, um überhauot irgendwas lesen zu können, einen Reader (z.B. den
Code:
FileInputStream
) und zum Schreiben einen Writer (z.B. den
Code:
FileOutputStream
).

Nach einem bestommten Zeichen suchst du mittels
Code:
einString.indexOf("=")
, alles ab diesem Zeichen bekommst du dann mittels folgendem Audruck:
Java:
einString.subString(einString.indexOf("="));
 
Zuletzt bearbeitet:
Ich habe bei google gefunden wie ich Variablen speicher, einzelne Variablen ne neue Zeile anfange und wie ich Zeile für Zeile ausgebe aber ich fand nicht wie ich eine bestimmte Zeile finde in dieser zeile alles auser. . . überschreibe.
Bekomm ich per
Java:
einString.subString(einString.indexOf("="));
alles nach dem = und zähl das = noch dazu?
 
Zuletzt bearbeitet:
Hallo,

das geht nicht.

Du liest die Datei, manipulierst sie, und schreibst sie dann ganz neu...

Gruß,
Martin
 
Wie soll das gehen, ich möchte bei "Name=myName" das myName in einer Variable haben.
Und ich möchte beim Beenden des Programms die Variable die nun Manipuliert wurde wieder hinter Name= speichern.
 
Wie soll das gehen, ich möchte bei "Name=myName" das myName in einer Variable haben.
Wo ist das Problem?

Java:
String zeile = einBufferedReader.readLine();
String myName = zeile.subString(zeile.indexOf("=") + 1);
Das Ganze in einer Schleife, die bis EOF durchläuft und fertig. Bearbeitung der Dazei - wie Marczinek bereits erwähnt hat - NACH dem Lesen oder vorher, in keinem Fall gleichzeitig...
 
Java:
while ((line = einBufferedReader.readLine() != null) {
  if (line.startsWith("Name")) {
    // bearbeite line
  }
 
  lines.add(line);
}

// und wieder zurückschreiben
 
Du könntest z.B. alles VOR dem Gleichheitszeichen erstmal überprüfen auf "Name", "Rang" und "Bezeichnung".
Also sowas wie:
Java:
if (key.equals("Name") {...}
else if (key.equals("Rang") {...}
else if (key.equals("Bezeichnung") {...}
else {// Fehlercode}
Mit der
Code:
EOF
hat das erstmal ja nix zu tun. Für
Code:
EOF
brauchst nur zu prüfen, ob die gerade eingelesene Zeile
Code:
null
ist.
 
@ErikeB ich verstehe. . . was bewirkt diese Anweisung
Java:
 lines.add(line);

@Marcinek auf dieser seite war ich, habe bessere anleitungen gefunden zudem geht es mir um das Schreiben hinter bestimmte Dinge und nicht allgemein um das Schreiben in eine Datei.

@HimBromBeere was bedeutet key.equals?
 
Zuletzt bearbeitet:
Java:
while ((line = accFormat.readLine() != null) {
  if (line.startsWith("Name")) {
    String zeile = accFormat.readLine();
    String Spieler[playerid][name]= zeile.subString(zeile.indexOf("=") + 1);
  }
 
  lines.add(line);
}
kann ich damit den mane des spielers in der Arry speichern?
und welcher type hat line?
 
Übrigens: du liest mit jedem Schleifendurchlauf gleich zwei Zeilen ein, die "Namens"-Zeile und direkt danach die darauf folgende Zeile (die "Rang"-Zeile im Bsp.). Allerdings liest du nur von der zweiten überhaupt irgendwas aus. Soll heißen: Mach Ziel e 3 weg und ersetze alle
Code:
zeile
-Vorkommen durch
Code:
line
. Des Weiteren erstellst du mit jedem Schleifendurchlauf ein neues Array, was ziemlich doof ist (String gehen als Index außerdem sowieso nicht...). Du suchst wahrscheinlich eher sowas wie:
Java:
spieler[playerID] = line.subString(zeile.indexOf("=") + 1);
 
@TO
ich würde dir hier entgegen aller anderen post immer noch [japi]Properties[/japi] empfehlen ... da du ja scheinbar nicht die grundlagen beherschst dir sowas selbst zu bauen ...

um eine Properties zu laden brauchst du erstmal einen stream ...
hierbei kommt es darauf an wo das file liegt ...
da du es manipulieren willst sollte es dierekt im file-system liegen ...
dann kannst du über [japi]File[/japi] ein objekt darauf erzeugen ...
mit [japi]FileInputStream[/japi] erzeugst du dir dann einen inputstream auf das file in dem du dessen referenz übergibst
nun erzeugst du dir ein leeres [japi]Properties[/japi] objekt und callst "load(InputStream)"
danach kannst du den FileInputStream closen ...
nun hast du in einem objekt die key-value paare und kannst über "getProperty(String)" darauf zugreifen ... wobei der string den key darstellt ... also das was "links" steht ...
wenn du eine bestimmte Property nun manipulieren willst callst du auf dein Properties objekt einfach "setProperty(String, String)" wobei der erste parameter der key ist ... und der zweite die neue value
zum schluss speicherst du die Properties wieder ...
dazu brauchst du einen [japi]FileOutputStream[/japi] auf dein file-objekt ...
nun callst du "store(OutputStream, String)" ... wobei der zweite parameter leer bleiben kann .. also einfach "" ...

das ganze sieht dann so aus

Java:
Properties props=new Properties();
File propsFile=new File("porps.properties");
InputStream in=new FileInputStream(propsFile);
props.load(in);
in.close();
String name=props.getProperty("Name");
//... do somethin
//String newName="blahblahblah";
props.setProperty("Name", newName);
OutputStream out=new FileOutputStream(propsFile);
props.store(out, "");
out.close();

btw : wenn ich das richtig gelesen habe soll das ein "Spiel" werden ?
lass es lieber ... denn du hast nicht mal die einfachsten grundlagen drauf und willst ein spiel schreiben ... was dann am ende wenn überhaupt eh nicht laufen wird *geschweige denn compilebar wäre* ...

[ot]WARUM eigentlich ? warum kommen immer wieder anfänger auf die idee *meist "jüngere"* : "ich kann 3 tage java mit 4 zeilen die ich aus nem biespiel hab ... nun will ich spiele programmieren" ? ...
leute ... das könnte ihr vergessen ... denn das wird so NICHTS !
wenn ihr spiele-entwickler werden wollt lernt erstmal die programmiersprache *ganz gleich ob C/++ , Java , plain-interpreter wie Perl und PHP oder script-langs wie JavaScript* ... und macht euch dann erstmal gedanken über software- und spiele-design ...[/ot]
 
Ich werde das nun mal testen, es soll kein Spiel werden sondern ein Programm das einfache Daten speichert wie Namen und Nummern eher zum üben allerdings so, das man die verschiedenen Informationen wieder verwenden kann.
Ich habe aber nun was ich brauch, den rest kann ich wieder aus google suchen.
 
Ich werde das nun mal testen, es soll kein Spiel werden sondern ein Programm das einfache Daten speichert wie Namen und Nummern eher zum üben allerdings so, das man die verschiedenen Informationen wieder verwenden kann.
Ich habe aber nun was ich brauch, den rest kann ich wieder aus google suchen.

kein comment ...

google : "java config storage" ...
dort werden alle gebräuchlichen möglichkeiten zu finden gewesen : XML , Properties , Datenbanken .. aber das hast du ja scheinbar auch nicht drauf ... und dann willst du dir den rest doch wieder aus google ziehen ... will gar nich wissen wo das endet
 

Neue Themen


Zurück
Oben