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に比較的慣れていないので、助けていただければ幸いです! これは私がこれまでに行った方法です:
- ファイルを 1 行ずつ読みます。各行を新しい一時テキスト ファイルに書き込み、追加します。
- 行に「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);
}