[英]Replacing an old textfile with a new textfile in Java
我只是想知道如何替換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還是比較陌生,所以一定會對您有所幫助! 到目前為止,這是我做的事情:
現在,我被困的是步驟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);
}
您可以使用此代碼來代替創建臨時文件 。
在這里而不是創建臨時文件。
我將文件內容添加到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();
I was just wondering how I would go about replacing a certain bit of a text in a textfile in Java?
此問題就像隨機文件訪問一樣。 如果您沒有刪除原始文件並制作一個新文件,則很難做到。 可能首先搜索字符串,然后在內存中查找 替換並覆蓋文件。
請改用XML文件。 有一個簡單有效的方法XMLparsing 。 您可以在此處找到完整的現成的不同示例 。 這非常有幫助, 而不是將記錄類型的文本保存在“簡單文本”文件中。
希望能幫助到你。
我假設您在邏輯上沒有其他問題(即您希望通過此實現的目標),正如我從您提供的示例中注意到的那樣,以下幾行:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.