Einzelne Zeile manipulieren

Status
Nicht offen für weitere Antworten.
R

roger

Gast
Hallo liebe Leute,
ich möchte in einer Textdatei eine einzelne Zeile ändern.

Bsp:
1
2
3
4

Nun soll mein Programm aus der 3 beispielsweise eine77 machen.

1
2
77
4

Ich hab das nun so programmiert, dass die Datei Zeilenweise eingelesen wird.
Jede Zeile wird in eine temporäre Datei geschrieben. Wird eine Zeile mit dem Suchkriterium gefunden wird sie mit dem gewünschten Wert ersetzt.
Danach schreibe ich die temporäre Datei in die Originale und lösche die temporäre Datei.

Das funktioniert zwar recht gut. Nur was ist wenn ich Dateien >800MB hab.
Meine Lösung scheint mir extrem ineffizient.
Ich denke, dass mir der Javaspeicher da irgendwann nicht mehr mitmacht.
Die Temporäre Datei kostet mich zudem nochmal 800 MB Festplattenplatz.
Das muss doch viel einfacher gehen...ich will ja wirklich nur eine Zeile austauschen. Zudem steht diese Zeile auch ziemlich am Anfang der Datei.

Danke für Hinweise, wie man das machen könnte.

Gruss
Roger
 

Leroy42

Top Contributor
roger hat gesagt.:
Zudem steht diese Zeile auch ziemlich am Anfang der Datei.

Was deinem Ansinnen nicht entgegenkommt.

Überleg mal: Du willst

1
2
3
4
5

ersetzen in
1
2
77
4
5

Da deine Ersatzzeile länger als die Originalzeile ist, müssen sich die
Positionen aller Folgezeilen nach hinten verschieden. Das hat
nichts mit Java zu tun sondern ist davon abhängig wie das Betriebssystem
die Zeilen speichert (nämlich sequentiell)

Du hast keine andere Möglichkeit als zeilenweise einzulesen und wieder
auszugeben.

Allerdings würde ich die Originaldatei nicht im Speicher halten sondern
nur die aktuelle Zeile und sofort diese oder die geänderte speichern.

Nach Beendigung führe folgende Schritte aus.

1. Originale Datei in temporäre Datei umbenennen
2. Neu erstellte Datei in Originalnamen umbenennen.
3. Originale Datei (mit neuem Namen) löschen.

Punkt 1) ist wichtig, falls du sie noch retten willst, wenn das System crasht!
 
R

roger

Gast
Danke für die schnelle Antwort.
Wie kann ich denn sicherstellen, dass Java immer nur eine Zeile im Speicher hält?

Bis jetzt hab ich das so gemacht:



Code:
eingabedatei = new File(nameEingabedatei);
ausgabedatei = new File(nameAusgabedatei);
fr = new FileReader(eingabedatei);
fw = new FileWriter(ausgabedatei);
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);

zeile=br.readLine();
      while ( zeile != null ) {
		if(zeile.equals(suchzeile))
			{
				System.out.println("Zeile gefunden, nun ersetzten");
				zeile=eingabezeile;

		}

        bw.write(zeile+newline) ;  //Die Zeile in die temporäre Datei schreiben
        zeile=br.readLine();

      }
br.close();

bw.close();

Wird denn auf diese Art immer nur eine Zeile der Eingabedatei im Speicher gehalten?
Oder muss ich da was explizit noch einstellen

LG
roger
 

Leroy42

Top Contributor
Du mußt nichts einstellen. Java kümmert sich selbständig um die Speicherverwaltung.

Durch die Zuweisung in Zeile 19 gibt es jeweils keine Referenz auf den alten String
und die JVM weiß daß sie den belegten Speicher wieder freigeben darf.

Nun ist die JVM aber schlau genug, dies nicht bei jeder Zuweisung zu machen,
sondern nur "wenn ihr der Speicher ausgeht".

Also ist deine Methodik vollkommen ok und effizient. :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Q Einzelne Java-Quelldatei veröffentlichen Allgemeine Java-Themen 8
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
O log4j - eigenes Log für einzelne Klasse Allgemeine Java-Themen 5
A BufferedImage einzelne Pixel transparent machen V2.0 Allgemeine Java-Themen 2
R SecurityManager für einzelne Klassen/Threads? Allgemeine Java-Themen 38
N Methoden Einzelne Daten aus "Person" auslesen Allgemeine Java-Themen 3
C aus einem String einzelne Hex Werte lesen Allgemeine Java-Themen 7
J String zerlegen in einzelne Strings Allgemeine Java-Themen 7
A einzelne Tage als Datum ausgeben Allgemeine Java-Themen 6
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
S Zugriff auf einzelne Bildpunkte Allgemeine Java-Themen 3
N String in einzelne Zeichen zerlegen Allgemeine Java-Themen 8
T (nur) HP Photosmart Drucker lässt einzelne Seiten aus Allgemeine Java-Themen 6
F Einzelne Einträge im Array als konstant festlegen Allgemeine Java-Themen 2
T Wo kann ich einzelne JARs herunterladen Allgemeine Java-Themen 3
G einzelne zeilen aus textArea auslesen Allgemeine Java-Themen 8
M einzelne Tastendrücke von der Konsole einlesen Allgemeine Java-Themen 3
G Einzelne Keys aus Properties-Datei auslesen Allgemeine Java-Themen 4
P byte -> einzelne bits auslesen ??? Allgemeine Java-Themen 4
S Einzelne Elemente in einer Bild Datei Allgemeine Java-Themen 5
H JavaFX Warnung in package Zeile Allgemeine Java-Themen 2
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
M Checkstyle 100 Zeichen pro Zeile Allgemeine Java-Themen 11
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
Bluedaishi Zeile um zeichen erweitern Allgemeine Java-Themen 9
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
F Fehler in Zeile in Log schreiben Allgemeine Java-Themen 6
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
F String nach Schlüsselwörtern durchsuchen und ganze Zeile ausgeben Allgemeine Java-Themen 4
C Speicherung fon Zeile und Spalte Allgemeine Java-Themen 2
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
M Startdatei konnte nicht geparst werden. Fehler in Zeile 0 Allgemeine Java-Themen 5
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
X Scanner hört nach der 25. Zeile auf Allgemeine Java-Themen 6
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
1 InputStream liest die letzte Zeile nicht ein Allgemeine Java-Themen 2
S String aus Datei-Zeile auslesen Allgemeine Java-Themen 6
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
neonfly Anzahl Zeichen pro Zeile auf der Konsole Allgemeine Java-Themen 8
H RandomAccessFile - Zeile finden Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
G Zeile einfügen in TreeTable Allgemeine Java-Themen 2
M .txt Datei öffnen und jede Zeile mit festem String verketten Allgemeine Java-Themen 5
O Zeile eines Textfiles löschen Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
J Text einer .csv Datei einlesen und Zeile in NEUE Zeile hänge Allgemeine Java-Themen 1
B Logs - txt-Datei neue Zeile anfuegen, neue Datei erstellen Allgemeine Java-Themen 6
S Zweidimensionales Array neue Zeile erzeugen Allgemeine Java-Themen 3
P Neue Zeile Plattformunabhängig Allgemeine Java-Themen 3
I Zeile überprüfen Allgemeine Java-Themen 12
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
Saxony Letzte Zeile eines Streames mit auslesen Allgemeine Java-Themen 4
H Notepad - Mitgabeparameter um in eine Zeile zu springen Allgemeine Java-Themen 15
M Funktion liest nach Textaus aus der vorigen Zeile Allgemeine Java-Themen 2
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
M Datei und Zeile im Code Allgemeine Java-Themen 2
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W gezielt eine Zeile einlesen? Allgemeine Java-Themen 6
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
L JTable: Wenn Zeile markiert dann Meldung. geht nicht Allgemeine Java-Themen 4
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8
G String in String-Array umwandeln in einer Zeile? Allgemeine Java-Themen 2
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
P iTunes Datenbank manipulieren Allgemeine Java-Themen 2
R Problem beim vCard Manipulieren Allgemeine Java-Themen 2
Z 2D-Grafik Webcam-Bilder analysieren und manipulieren Allgemeine Java-Themen 8
S Dynamisches Manipulieren/Laden von Klassen Allgemeine Java-Themen 4
C Bilder automatisch bearbeiten/manipulieren Allgemeine Java-Themen 2
H Pixel im BufferedImage Manipulieren ? Allgemeine Java-Themen 17
K Elegante Lösung zum Manipulieren von Collections gesucht Allgemeine Java-Themen 16
D mausbewegungungen manipulieren Allgemeine Java-Themen 2
M Array per Reflection manipulieren Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben