我只是想知道如何用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: 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的新手,所以一些帮助真的很感激!到目前为止,我就是这样做的:
现在我坚持的是第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);
}
答案 0 :(得分:1)
而不是创建临时文件您可以使用此代码
这里不是创建临时文件
我将文件内容添加到StringBuilder
对象,迭代完成后,
打印StringBuilder
对象到同一个文件。所以你不需要创建
临时文件在这里,并将其重命名为旧文件或删除旧文件。请查看我的代码。
BufferedReader br = new BufferedReader(new FileReader(new File("filepath")));
String line = null;
StringBuilder sb =new StringBuilder();
while ((line = br.readLine())!=null)
{
if(line.indexOf(uname)!=-1)
{
//do your logic here
sb.append("your logic here"+"\n");
}else{
sb.append(line+"\n");
}
}
br.close();
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("filepath")));
PrintWriter out = new PrintWriter(bw);
out.print(sb.toString());
out.flush();
out.close();
答案 1 :(得分:1)
I was just wondering how I would go about replacing a certain bit of a text in a textfile in Java?
这个问题就像随机文件访问一样。如果您没有删除原始文件并创建一个新文件,则很难做到。可能首先搜索字符串,然后在内存中替换,覆盖文件。
请改用XML文件。有一种简单有效的方法 XMLparsing 。您可以找到完整的现成的示例 here。它非常有用,而不是在简单文本文件中保存记录类型文本。
希望它有所帮助。
答案 2 :(得分:1)
我假设您对逻辑没有其他问题(即您希望通过此实现的目标),正如我从您给出的示例中注意到的那样,以下几行:
int lineStart = eachline.indexOf("Username: " + uname);
int lineEnd = eachline.indexOf("end" + uname + ";");
int unameLength = uname.length();
将-1返回lineStart
和lineEnd
要解决您当前的问题,请添加sc.close();
& file1.delete();
//
//
//Modified Lines
sc.close();
out.close();
file1.delete();
} catch (FileNotFoundException e) {
System.out.println("Error: Could not find database/storage.");
}
//Catch Statement and remaining Code