我只是想知道如何在 Java 中替换文本文件中的某些文本?
例如,如果我有一个包含以下内容的文本文件:
John: My Status is: 0;
William: My Status is: 0;
Andrew: My Status is: 1;
Bob: My Status is: 1;
Smith: My Status is: 0;
我想将包含字符串“William”的行替换为"William: My Status is: 1;"
因此,新的文本文件应如下所示:
John: My Status is: 0;
William: My Status is: 1;
Andrew: My Status is: 1;
Bob: My Status is: 1;
Smith: My Status is: 0;
我对 OOP 还是比较陌生,所以非常感谢一些帮助!到目前为止,我是这样做的:
- 逐行阅读文件。将每一行写入并附加到一个新的临时文本文件中。
- 如果该行包含单词“William”,则将该行替换为“William: My status is: 1”,然后附加到临时文本文件中。
- 用临时文本文件替换我的旧文本文件
现在我坚持的是第 3 步!(我认为这一步是最简单的!)。
似乎内容已正确写入临时文本文件,但由于某种原因,我无法让它替换旧的文本文件!到目前为止,这是我的实际代码:(对不起,如果阅读太多,如果是,那么如果你能给我一些一般性的建议,那也很棒!)
public void verifyUser(UserDataObject u) {
String eachline = "";
String uname = u.getUsername();
Scanner sc;
try {
File file1 = new File("FlatFileStorage.txt");
sc = new Scanner(file1);
FileWriter fw = new FileWriter("TempFlatFileStorage.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
while (sc.hasNextLine()) {
eachline = sc.nextLine();
if ( eachline.contains(uname) ) {
int lineStart = eachline.indexOf("Username: " + uname);
int lineEnd = eachline.indexOf("end" + uname + ";");
int unameLength = uname.length();
String lineStatus = eachline.substring(lineStart, lineEnd + 4 + unameLength);
//System.out.println(lineStatus);
String newLineStatus = lineStatus.replace("VerifyStatus: 0", "VerifyStatus: 1");
System.out.println(newLineStatus);
out.println(newLineStatus);
} else {
System.out.println(eachline);
out.println(eachline); }
}
out.close();
} catch (FileNotFoundException e) {
System.out.println("Error: Could not find database/storage."); } catch (IOException e) {
System.out.println("There has been an error: " + e.getMessage());
e.printStackTrace();
}
File file = new File("FlatFileStorage.txt");
File tempfile = new File("TempFlatFileStorage.txt");
tempfile.renameTo(file);
}