Ich versuche, ein Programm, das eine angegebene String
empfängt, und entfernt jedes Auftreten dieser String
in einem Textdokument. Die Textdatei, die zum Lesen/Schreiben verwendet wird, ist identisch. Die Argumente verwendet werden, von cmd empfangen werden, in dieser Reihenfolge:Lesen und Schreiben in die gleiche Datei mit try-with-resources
inputString filename
Das Programm stellt in Ordnung, aber es bleibt die ursprüngliche Textdatei leer, nachdem ausgeführt wird. Wenn ich einen try-catch-Block für die Eingabeverarbeitung und einen try-catch-Block für die Ausgabeverarbeitung verwende, kann ich in dieselbe Datei lesen und schreiben. Wenn ich einen try-with-resources-Block verwende, kann ich eine Datei lesen und die Ausgabe in eine andere Datei als das Original speichern, wobei alle Vorkommen inputString
von cmd entfernt sind. Aber es scheint, als ob ich mit try-with-resources nicht in dieselbe Datei lesen und schreiben kann, und auch die input.hasNext()
-Anweisung gibt false zurück, wenn ich versuche, es so zu machen.
Code-Beispiel unten:
package ch12;
import java.io.*;
import java.util.*;
public class Chapter_12_E11_RemoveText {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("Usage java ch12.Chapter_12_E11_RemoveText inputString filename");
System.exit(1);
}
File filename = new File(args[1]);
if (!filename.exists()) {
System.out.println("Target file " + args[1] + " does not exist");
System.exit(2);
}
try (
Scanner input = new Scanner(filename);
PrintWriter output = new PrintWriter(filename);
) {
System.out.println("hasNext() is " + input.hasNext());
System.out.println("hasNextLine() is " + input.hasNextLine());
while (input.hasNext()) {
String s1 = input.nextLine();
System.out.println("String fetched from input.nextLine() " + s1);
System.out.println("Attemping to replace all words equal to " + args[0] + " with \"\"");
String s2 = s1.replaceAll(args[0], "");
output.println(s2);
}
}
}
}
Ich Verdacht besteht, dass, wenn ich ein neues PrintWriter
Objekt mit dem Argument filename
, die ursprüngliche Datei durch eine leere Datei, bevor die while-loop
ausführt erstellen überschrieben wird. Bin ich hier? Ist es möglich, mit try-with-resources in dieselbe Datei zu schreiben und zu lesen?
Als Duplikat mit falschem Duplikat geschlossen. Wieder geöffnet. – Mena