Problem beim Lesen und Schreiben einer Datei

Zcelo12

Mitglied
Guten Morgen,
ich habe mich soeben registriert, da ich einfach nicht weiterkomme. Ich nutze Java lediglich für Modifikationen von "Java-Spielen". Nun möchte ich aus einer Datei, eine Zeile verändern. Dafür möchte ich am Ende der Zeile, die "S:LightItems" enthält, einen Integer anhängen. Mein Problem ist, dass dann die komplette Textdatei nur mit dieser Zeile überschrieben wird. Es soll lediglich aber nur eine Zeile verändert werden. Die Zeile muss auch in der selben Position bleiben, da sie in der Text/CFG Datei in einer Funktion steht.

Ich zeige euch mal meinen bisherigen Java-Code und die Text/CFG Datei.

Java:
public void run()
        {            
                try {
            		BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\abt\\Desktop\\forge804\\mcp\\jars\\config\\DynamicLights_thePlayer.cfg"));
            		String line = null;
            		while ((line = in.readLine()) != null) {
            			if (line.contains("S:LightItems"))
                        {
            			if (!line.contains("4020"))
                           {
            				BufferedWriter out = new BufferedWriter(new FileWriter("C:\\Users\\abt\\Desktop\\forge804\\mcp\\jars\\config\\DynamicLights_thePlayer.cfg"));
            				String id = ",4020=10";
            				out.write(line+id);
            				out.close();
                           }
                        }
            		}
            		in.close();
            	} 
                catch (IOException e) {
            		e.printStackTrace();
                }
        }

Code:
# Configuration file

####################
# general
####################

general {
    # Item IDs that shine light while held. Armor Items also work when worn. [ONLY ON YOURSELF]
    S:LightItems=50,89=12,348=10,91,327,76=10,331=10,314=14

    # Item IDs that do not shine light when held in water, have to be present in LightItems.
    S:TurnedOffByWaterItems=50,327
}
 

Keyone94

Mitglied
die ganze datei auslesen, dann abändern, dann wieder speichern wäre ein weg

der BufferedReader und BufferedWriter sind nicht über einen magischen Faden verbunden, der Writer weiß also nicht wo der Reader gerade hängt
 

Zcelo12

Mitglied
Momentan lese ich die Datei ja zeilenweise. Wie lese ich die denn komplett und anschließend überprüfen in welcher Zeile sich "S:LightItems" befindet?

Gruß
Zcelo12 :)
 

mfernau

Bekanntes Mitglied
Momentan lese ich die Datei ja zeilenweise. Wie lese ich die denn komplett und anschließend überprüfen in welcher Zeile sich "S:LightItems" befindet?

Gruß
Zcelo12 :)

Das tust Du doch schon:
Java:
                    while ((line = in.readLine()) != null) {
                        if (line.contains("S:LightItems"))
                        {
                        if (!line.contains("4020"))
                           {
                            BufferedWriter out = new BufferedWriter(new FileWriter("C:\\Users\\abt\\Desktop\\forge804\\mcp\\jars\\config\\DynamicLights_thePlayer.cfg"));
                            String id = ",4020=10";
                            out.write(line+id);
                            out.close();
                           }
                        }
                    }

Du liest die Datei Zeilenweise ein bis sie zu ende ist. Das tut Deine While-Schleife. Was Du nun machen musst ist, dass Du während des Einlesens jede Zeile auch wieder heraus schreibst in eine temporäre zweite Datei. Bei der Zeile mit dem "S:LightItems" tust Du das, was Du tun willst und setzt danach fort bis Deine while zu ende ist.
Anschließend musst Du die tmporäre Datei umbenennen in die ursprüngliche Datei und fertig.

Hier Pseudo-Code:
Code:
Öffne Eingangsdatei A
Öffne temporäre Ausgangsdatei B (z.b. mit File.createTempFile(..,..))
Für jede Zeile x aus A tue
   IF x enthält "S:LightItems" THEN
      Hänge Integer an x an
   schreibe x nach B
END WHILE
lösche A
benenne B um nach A
ENDE
 

GeoRage

Mitglied
Es gibt teilweise Probleme beim Löschen von Dateien.
Also kannst du alternativ die Datei auch auslesen und jede Zeile in einer List speichern.

Dann hast du jede Zeile als Element in deiner List und kannst damit rumspielen.
Sobald deine Änderungen vorgenommen hast, speicherst/schreibst die List wieder in die Datei.
 

GeoRage

Mitglied
Das ich das letzte mal damit gearbeitet hab is etwas länger her, aber da hat ich das problem auch, das ich die gewünschte Datei nicht löschen konnte. Ich hab dann auch auf nen zwischenspeicher in form von Liste oder Array zurückgegriffen

Habs hier aber immer wieder mal gelesen, das davon abgeraten wurde. (zB bei fragwürdigen Schreib-Rechten des Benutzers (falls auf Windowsoberfläche) etc)
 

mfernau

Bekanntes Mitglied
Hm - ehrlich gesagt kann ich das nicht nachvollziehen. Wenn Du mit einem Zwischenspeicher arbeitest (mal abgesehen davon, dass wir hier nicht wissen wie groß die Datei ist - bei vielen MBs bis GBs fände ich das wenig nützlich) und die ursprüngliche Datei überschreibst, musst Du ebenfalls Schreibrechte auf diese Datei besitzen.
Grundsätzlich ist es immer eine Frage der Zugriffsrechte weswegen bei Dateioperationen auch immer mit File.canWrite() und/oder File.canRead() abgefragt werden sollte, ob die nachfolgenden Operationen auch von Erfolg gekrönt sein werden.
In meinen bisherigen Projekten habe ich das immer getan und ich hatte bisher noch nie das Problem, dass ich eine Datei nicht löschen konnte. Und wenn doch, lag es daran, dass ich sie vergessen hatte zu schließen (was seit Java7 beim verlassen des umschließenden Blocks automatisch geschieht).

Jeder muss letztlich selbst entscheiden wie er ein Problem löst. Ich persönlich würde davon abraten eine Datei in den Speicher zu lesen und anschließend wieder raus zu schreiben:
1. Aufgrund des Speicherbedarfs (bei ein paar K natürlich zu vernachlässigen)
2. Aufgrund der Fehleranfälligkeit. Denn was machst Du, wenn Dein Programm während des Schreibens auf eine RuntimeException trifft und abbricht? Dann sind die Daten futsch, weil nur halb geschrieben.
IMHO ist die Lösung über eine temporäre Datei eine gängige Lösung. Nach dem Schreiben in eine Temp-Datei weißt Du, dass die Daten komplett sind. Sollte das Löschen+Umbenennen an irgend einer Stelle fehl schlagen, sind die Daten trotzdem alle vorhanden.

Aber wie gesagt - es muss jeder für sich selbst entscheiden wie er sein spezifisches Problem löst.

Schöne Grüße
Martin
 

Matt

Aktives Mitglied
Vor dem löschen mūssen die streams geschlossen sein.

In deinem fall der fileReader und bufferedReader.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
H Problem beim lesen des InputStreams von einem Subprozess Java Basics - Anfänger-Themen 4
M line.separator: Problem beim Lesen einer Datei Java Basics - Anfänger-Themen 11
E Verständnisfrage/Problem beim lesen mit ObjectInputStream Java Basics - Anfänger-Themen 3
W Problem beim lesen aus Arraylist Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
E Datentypen Problem beim Speichern von enum. Java Basics - Anfänger-Themen 10
A Problem beim Deklarieren von einem BOOLEAN Java Basics - Anfänger-Themen 4
B Gleicher Prozess starten und stoppen (Problem beim Stoppen) Java Basics - Anfänger-Themen 5
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
B Problem beim Angeben einer Eingabe Java Basics - Anfänger-Themen 12
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
R Problem beim Wochenplan (Datum,Wochentag) Java Basics - Anfänger-Themen 30
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
A Compiler-Fehler Problem beim einbinden der applet Klasse Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
R Problem beim erstellen eines neuen Klassenobjekts Java Basics - Anfänger-Themen 2
F Input/Output Problem beim einlesen eines Strings Java Basics - Anfänger-Themen 3
J Problem beim auslesen von Int Wert aus YML-Datei Java Basics - Anfänger-Themen 6
P Problem beim Abschluss im Kompositum Java Basics - Anfänger-Themen 3
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
J Problem beim ausführen in cmd.exe Java Basics - Anfänger-Themen 4
J Variablen Problem beim einlesen einer Zahl Java Basics - Anfänger-Themen 7
A Problem beim Compilieren Java Basics - Anfänger-Themen 11
J Problem beim Fenster Java Basics - Anfänger-Themen 4
tux20 Problem beim Schreiben von List to File Java Basics - Anfänger-Themen 2
M Problem beim Compilieren Java Basics - Anfänger-Themen 14
Maxim6394 Problem beim Abspielen von Sounds Java Basics - Anfänger-Themen 8
S Problem beim ersten compilieren überhaubt Java Basics - Anfänger-Themen 43
Luk10 Problem beim .jar Datei erstellen Java Basics - Anfänger-Themen 19
L Problem beim Ausführen Java Basics - Anfänger-Themen 40
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
E Problem beim Programmieren eines Kartenspiels Java Basics - Anfänger-Themen 3
A Problem beim Ausführen einer .jar datei auf externen System Java Basics - Anfänger-Themen 5
M Problem beim compilieren Java Basics - Anfänger-Themen 6
JAVAnnik problem beim lvl laden Java Basics - Anfänger-Themen 15
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
W Problem beim erstellen eines Tests Java Basics - Anfänger-Themen 16
JAVAnnik Problem beim Objekt bewegen Java Basics - Anfänger-Themen 20
A Erstes Programm - Problem beim Ausführen als jar Java Basics - Anfänger-Themen 3
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
B Problem beim Abspielen einer Videodatei Java Basics - Anfänger-Themen 4
S Problem beim Erstellen eines Scanner-Objekts Java Basics - Anfänger-Themen 7
W Problem beim CSV-Import Java Basics - Anfänger-Themen 5
M Datentypen Problem beim zusammenstellen eines Abfrage-Strings Java Basics - Anfänger-Themen 3
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
S Problem beim Kompilieren - cannot find symbol - constructor() Java Basics - Anfänger-Themen 12
B Problem beim Email versenden mit Javamail Java Basics - Anfänger-Themen 5
H Problem beim Anfang von Java (Java Editor) Java Basics - Anfänger-Themen 2
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
D Problem beim Zeichnen von "Das Haus vom Nikolaus" Java Basics - Anfänger-Themen 10
D Problem beim Auslesen aus File Java Basics - Anfänger-Themen 3
A Problem beim Splitten eines Strings Java Basics - Anfänger-Themen 10
S Problem mit ObjectInputStream beim Einlesen von LinkedList Java Basics - Anfänger-Themen 3
J Problem beim Löschen von elementen aus einer ArrayList Java Basics - Anfänger-Themen 5
V Problem beim Programm laden Java Basics - Anfänger-Themen 5
H Problem beim kompilieren Java Basics - Anfänger-Themen 3
C ActionListener problem beim starten von programmen Java Basics - Anfänger-Themen 3
4 OOP Problem beim Speichern verschiedener Klassen in verschiedenen Dateien Java Basics - Anfänger-Themen 25
T Problem beim Returnwert einer Methode Java Basics - Anfänger-Themen 12
Miladriel Problem beim Neuzeichnen nach deiconify Java Basics - Anfänger-Themen 9
R Problem beim Ausführen von Java-PGM aus der shel Java Basics - Anfänger-Themen 3
G Problem beim Sortieren einer Liste Java Basics - Anfänger-Themen 20
M Problem beim Ereignishandling mit Menü Java Basics - Anfänger-Themen 2
H problem beim zeichen im JFrame Java Basics - Anfänger-Themen 6
F Problem beim Objekteaufruf... Java Basics - Anfänger-Themen 4
E BlockChallenge: Problem beim löschen der Blöcke Java Basics - Anfänger-Themen 3
H Problem beim Verkürzen von Programm Java Basics - Anfänger-Themen 3
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
M Problem beim Zugriff auf Daten GUI + Startklasse Java Basics - Anfänger-Themen 4
P Problem beim Thread Java Basics - Anfänger-Themen 20
0 problem beim Polygon zeichnen Java Basics - Anfänger-Themen 3
V Problem beim erstellen eines ausführbaren Programs Java Basics - Anfänger-Themen 5
0 Problem beim Starten des Applets Java Basics - Anfänger-Themen 2
N Problem beim Durchsuchen einer LinkedList Java Basics - Anfänger-Themen 5
G Problem beim Programmieren von Blackjack Java Basics - Anfänger-Themen 15
R Problem beim Laden eines Images Java Basics - Anfänger-Themen 7
K Problem beim installieren des JDK 1.6+ version Java Basics - Anfänger-Themen 3
T Problem beim Konsolenstart Java Basics - Anfänger-Themen 5
C Problem beim Berechnen der Quadratwurzel Java Basics - Anfänger-Themen 3
C Problem beim nutzen von Teilprogrammen in main Java Basics - Anfänger-Themen 2
M Problem beim Zeichnen Java Basics - Anfänger-Themen 5
D Problem beim Kompilieren Java Basics - Anfänger-Themen 4
D Problem beim auslesen von TextArea Java Basics - Anfänger-Themen 3
G Problem beim Schreiben in Textdatei Java Basics - Anfänger-Themen 9
F ggT finden - problem beim qc Java Basics - Anfänger-Themen 4
S Problem mit url, inputStream und bytes beim Quellcode laden. Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben