Jeglichen Inhalt einer Textdatei nach Zeile n löschen

javapingu

Mitglied
Hallo liebe Community,

ich stehe glaube wieder einmal etwas auf dem Schlauch...und bräuchte einen kurzen Tipp.
Ich suche nach einer simplen und effizienten Möglichkeit alle Zeilen einer Textdatei nach einer bestimmten Zeile zu löschen.
Z.b. Nach Zeile 38 soll jeglicher Inhalt gelöscht werden.

In bash ist das ja keineswegs ein Problem. Leider finde ich in Java nur Möglichkeiten eine bestimmte Zeile zu löschen oder bestimmten pattern...:/
Für einen kurzen Tipp - ob es so etwas überhaupt gibt würde ich mich sehr freuen :)

[CODE lang="java" title="Pseudocode"]//Pseudocode (so in der Art habe ich mir das vorgestellt)
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
int linenumber = 38;
int line = 0;
while (((reader.readLine()) != null)) {
line++;
if (line > linenumber) {
//delete this line
}
}[/CODE]

Vielen lieben Dank :)

Liebe Grüße
 

Wireless

Mitglied
Hallo liebe Community,

ich stehe glaube wieder einmal etwas auf dem Schlauch...und bräuchte einen kurzen Tipp.
Ich suche nach einer simplen und effizienten Möglichkeit alle Zeilen einer Textdatei nach einer bestimmten Zeile zu löschen.
Z.b. Nach Zeile 38 soll jeglicher Inhalt gelöscht werden.

In bash ist das ja keineswegs ein Problem. Leider finde ich in Java nur Möglichkeiten eine bestimmte Zeile zu löschen oder bestimmten pattern...:/
Für einen kurzen Tipp - ob es so etwas überhaupt gibt würde ich mich sehr freuen :)

[CODE lang="java" title="Pseudocode"]//Pseudocode (so in der Art habe ich mir das vorgestellt)
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
int linenumber = 38;
int line = 0;
while (((reader.readLine()) != null)) {
line++;
if (line > linenumber) {
//delete this line
}
}[/CODE]

Vielen lieben Dank :)

Liebe Grüße
Davon abgesehen wie die Antwort auf deine Frage lautet wieso schreibst du while (((reader.readLine()) != null)) und nicht while (reader.readLine() != null)?
 

Wireless

Mitglied
oh tut mir leid, da hatte ich die Klammern noch mitkopiert :/ (Aus meinem Code der aktuell ähnlich ist und noch einige Klammern gebraucht hatte - Tut mir leid)
Zuerst dachte ich, dir wird schon jemand anderes helfen, aber dann habe ich doch noch etwas zusammen geschrieben.
Vielleicht hat jemand bessere Variante wie man den Code geschtalten könnte jedoch wäre das meine Lösung.
Java:
        String path = "test.txt";
        int lineNumber = 38;
        List<String> content;
        try (Stream<String> stream = Files.lines(Paths.get(path))) {
            content = stream.toList();
        }

        if (content.size() > lineNumber) {
            StringBuilder sB = new StringBuilder();
            for (int i = 0; i < lineNumber; i++) {
                sB.append(content.get(i));
                if (i != lineNumber-1)
                    sB.append("\n");
            }

            BufferedWriter writer = new BufferedWriter(new FileWriter(path));
            writer.write(sB.toString());
            writer.close();
        }
 

javapingu

Mitglied
Zuerst dachte ich, dir wird schon jemand anderes helfen, aber dann habe ich doch noch etwas zusammen geschrieben.
Vielleicht hat jemand bessere Variante wie man den Code geschtalten könnte jedoch wäre das meine Lösung.
Java:
        String path = "test.txt";
        int lineNumber = 38;
        List<String> content;
        try (Stream<String> stream = Files.lines(Paths.get(path))) {
            content = stream.toList();
        }

        if (content.size() > lineNumber) {
            StringBuilder sB = new StringBuilder();
            for (int i = 0; i < lineNumber; i++) {
                sB.append(content.get(i));
                if (i != lineNumber-1)
                    sB.append("\n");
            }

            BufferedWriter writer = new BufferedWriter(new FileWriter(path));
            writer.write(sB.toString());
            writer.close();
        }
Wow, ein riesen riesen großes Dankeschön!
Das hilft mir mega weiter :))) Vielen, vielen Dank - auf die Idee mit der Liste war ich gar nicht gekommen :O

Hab noch einen schönen und stressfreien Abend :)
Lg
 
K

kneitzel

Gast
Wenn Du schon mit Streams anfängst, dann kannst Du auch direkt limit und collect mit StringJoiner aufrufen. Dann wird das alles zu einem einfachen, kurzen:
Java:
        String path = "test.txt";
        int lineNumber = 38;
        try (Stream<String> stream = Files.lines(Paths.get(path))) {
            String result = stream.limit(lineNumber).collect(Collectors.joining("\n"));
        } catch (IOException ex) {
            System.err.println("Could not read " + path + ": " + ex.getMessage());
            ex.printStackTrace(System.err);
        }

Also ein Stream, der nur für ein toList oder so genutzt wird, sieht immer sehr dubios aus. Ebenso, wenn nur direkt ein forEach kommt.
Zumal dann ja ein einfaches readAllLines das direkt liefern würde ohne jeden zusätzlichen Code.
 

Wireless

Mitglied
Wenn Du schon mit Streams anfängst, dann kannst Du auch direkt limit und collect mit StringJoiner aufrufen. Dann wird das alles zu einem einfachen, kurzen:
Java:
        String path = "test.txt";
        int lineNumber = 38;
        try (Stream<String> stream = Files.lines(Paths.get(path))) {
            String result = stream.limit(lineNumber).collect(Collectors.joining("\n"));
        } catch (IOException ex) {
            System.err.println("Could not read " + path + ": " + ex.getMessage());
            ex.printStackTrace(System.err);
        }

Also ein Stream, der nur für ein toList oder so genutzt wird, sieht immer sehr dubios aus. Ebenso, wenn nur direkt ein forEach kommt.
Zumal dann ja ein einfaches readAllLines das direkt liefern würde ohne jeden zusätzlichen Code.
Stimmt
Das wäre dann bessere Variante
Java:
        String path = "test.txt";
        int lineNumber = 38;

        try (Stream<String> stream = Files.lines(Paths.get(path))) {
            String result = stream.limit(lineNumber).collect(Collectors.joining("\n"));

            BufferedWriter writer = new BufferedWriter(new FileWriter(path));
            writer.write(result);
            writer.close();
        } catch (IOException ex) {
            System.err.println("Could not read " + path + ": " + ex.getMessage());
            ex.printStackTrace(System.err);
        }
 
K

kneitzel

Gast
Hier bin ich mir nicht sicher, ob dies einwandfrei auf allen Systemen läuft:
Du bist noch in dem try-with-resources und das File könnte noch geöffnet sein. Das wäre bei Windows fatal, denn da wäre ein Schreiben dann nicht möglich. Daher wäre das Schreiben außerhalb des try-with-resources auf jeden Fall sicherer. (Ich muss aber gestehen, dass ich das Verhalten nicht kenne. Ich habe bei Streams in der Regel keinen close und ich würde vermuten, dass die Datei nach dem Lesen der letzten Zeile auch geschlossen wird. ==> Deine Variante ist aber auf jeden Fall durchaus angebracht und richtig! AutoClosable auf Ressourcen sollten so behandelt werden.

Und dann natürlich noch der Hinweis, den ich eben vergessen hatte:
Der BufferedWriter gehört dann natürlich auch in ein try-with-resources.

Das dann noch in eine Methode die die IOException auch nach außen gibt und die path / lineNumber als Parameter bekommen und wir hätten wohl eine saubere, runde Lösung. (@javapingu Je nachdem, was Dein Anspruch war, sind wir damit aber weit von jedem Anfängerkurs entfernt. Da haben wir Deinen Thread etwas missbraucht. Aber ich hoffe, dass es für @Wireless interessant ist/war.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
J Datentypen CSV to DB Leere Zellen in CSV mit Inhalt? Java Basics - Anfänger-Themen 11
H Universitätsaufgabe String inhalt Kontrollieren Java Basics - Anfänger-Themen 9
karlmasutra OOP Inhalt eines Array ausgeben lassen Java Basics - Anfänger-Themen 8
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
L Namensliste mit Array zeigt nicht den gewünschten Inhalt Java Basics - Anfänger-Themen 12
F Variablen JTextField-Inhalt kann nicht mit String abgeglichen werden Java Basics - Anfänger-Themen 2
Zeekay Development Methoden Methoden Inhalt Abhängig vom Objekt? Java Basics - Anfänger-Themen 9
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
R getrennte Objekte aus Klasse erstellen : warum Inhalt dann gleich ? Java Basics - Anfänger-Themen 2
Silvascus Inhalt eines externen Textdokuments an einen String übergeben Java Basics - Anfänger-Themen 2
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
K Variablenname soll der Inhalt vom String sein Java Basics - Anfänger-Themen 2
O Zip-File Inhalt einlesen Java Basics - Anfänger-Themen 3
S Inhalt aus anderen Klassen verwenden Java Basics - Anfänger-Themen 1
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
M Wie gebe ich den Inhalt aus? Java Basics - Anfänger-Themen 17
K Inhalt von einer csv-Datei abspeichern Java Basics - Anfänger-Themen 3
P Seite auf Inhalt prüfen Java Basics - Anfänger-Themen 2
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
1 den Inhalt eines Arrays umdrehen Java Basics - Anfänger-Themen 11
A Leere Datei wird ohne Inhalt geschrieben, obwohl Inhalt geschrieben wurde. Java Basics - Anfänger-Themen 4
K Inhalt in den Zwischenspeicher legen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
G Inhalt einer JTextArea wird nicht dargestellt Java Basics - Anfänger-Themen 8
J Inhalt in einem Text-File finden und in ein Array schreiben Java Basics - Anfänger-Themen 5
R Inhalt vom String größer oder kleiner als Java Basics - Anfänger-Themen 16
F Erste Schritte if Inhalt Java Basics - Anfänger-Themen 7
C Erste Schritte String-INhalt in TXT ausgeben Java Basics - Anfänger-Themen 7
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
U OOP Array vom Typ String > Inhalt ausgeben Java Basics - Anfänger-Themen 8
M Array Inhalt kopieren Java Basics - Anfänger-Themen 3
O Container Inhalt auslesen Java Basics - Anfänger-Themen 2
M Inhalt/Wert aus einer JList ablesen Java Basics - Anfänger-Themen 5
M String auf Inhalt überprüfen Java Basics - Anfänger-Themen 11
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
B Datentypen Inhalt von Objekten miteinander vergleichen Java Basics - Anfänger-Themen 2
I Mehrere ArrayLists mit einer for( : ) Schleife auf Inhalt prüfen Java Basics - Anfänger-Themen 6
R Erste Schritte Objekte mit anderen Objekten als Inhalt Java Basics - Anfänger-Themen 4
F Kopieren von Ordner sammt inhalt Java Basics - Anfänger-Themen 5
I Datei einlesen, Inhalt in MAP ablegen Java Basics - Anfänger-Themen 10
E Inhalt von Option Feldern auslesen? Java Basics - Anfänger-Themen 2
Helgon Inhalt - Aktualisierungs Problem Java Basics - Anfänger-Themen 7
T Inhalt Gridlayout wird nicht angezeigt Java Basics - Anfänger-Themen 6
O Variablen Variablen Inhalt von Webseite einlesen!? Java Basics - Anfänger-Themen 2
M Inhalt eines Strings um eins hochzählen Java Basics - Anfänger-Themen 19
M String Inhalt wird überschrieben (Subklassen verwenden denselben String) Java Basics - Anfänger-Themen 13
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
B jar Inhalt anzeigen Java Basics - Anfänger-Themen 5
H Input/Output Inhalt einer TextArea in Hex umwandeln Java Basics - Anfänger-Themen 10
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
J Inhalt eines Arrays vergleichen? Java Basics - Anfänger-Themen 8
X Collections Inhalt von zwei Collections prüfen Java Basics - Anfänger-Themen 4
D jTable befüllen mit dynamischem Inhalt Java Basics - Anfänger-Themen 11
M Inhalt Textfeld prüfen Java Basics - Anfänger-Themen 4
H Java-Fenster ohne Inhalt Java Basics - Anfänger-Themen 2
D Inhalt der Spalten einer Tabelle addieren Java Basics - Anfänger-Themen 4
B Datentypen Inhalt zum Iterator wieder aufrufen? Java Basics - Anfänger-Themen 10
E Inhalt zwischen zwei String auslesen? Java Basics - Anfänger-Themen 8
S Inhalt eines Vektors ausgeben Java Basics - Anfänger-Themen 2
F String-Inhalt als Datatype-Name Java Basics - Anfänger-Themen 5
D Inhalt einer Liste auf nur ein Wert überprüfen ohne die Liste komplett zu interieren Java Basics - Anfänger-Themen 6
M Tabelle mit immer sortiertem Inhalt Java Basics - Anfänger-Themen 5
S JFileChooser - Dateinamen vorschlagen/Inhalt der Ausgabe prüfen Java Basics - Anfänger-Themen 3
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
C Inhalt eines Strings in JLabel ausgeben? Java Basics - Anfänger-Themen 21
L Inhalt von JEditorPane löschen Java Basics - Anfänger-Themen 4
G Inhalt Jar-Files anzeigen, incl. Methoden Java Basics - Anfänger-Themen 2
D HashMap mit Inhalt kopieren Java Basics - Anfänger-Themen 8
M [J3D] Applet-Inhalt Speichern (Manipulationen etc. ...) Java Basics - Anfänger-Themen 2
X JTable --> Spaltenbreiter am dargestellten Inhalt anpassen Java Basics - Anfänger-Themen 4
C JPanel Inhalt anpassen Java Basics - Anfänger-Themen 4
P Objekte im Array speichern und auf den Inhalt zugreifen ? Java Basics - Anfänger-Themen 4
S Inhalt von GUI-Eingabe drucken Java Basics - Anfänger-Themen 7
Sweety JTable Inhalt löschen Java Basics - Anfänger-Themen 10
O OOP FileOutputStream überschreibt ganzen inhalt der txt Java Basics - Anfänger-Themen 4
K Inhalt eines Elements aus dem Objekt Array auslesen Java Basics - Anfänger-Themen 9
B mehrer comboboxes mit dem selben inhalt befüllen Java Basics - Anfänger-Themen 8
B Inhalt einer Datei ausgeben Java Basics - Anfänger-Themen 4
Z Verzeichnisse mit Inhalt löschen löschen Java Basics - Anfänger-Themen 7
B Datei Inhalt löschen Java Basics - Anfänger-Themen 3
R Frame Inhalt ausrichten Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben