4
BufferedReader br = null;
BufferedWriter bw = null;
try {
  br = new BufferedReader(new FileReader(oldFileName));
  bw = new BufferedWriter(new FileWriter(tmpFileName));
  String line;
  while ((line = br.readLine()) != null) {
    if (line.contains("Smokey")){
      line = line.replace("Smokey;","AAAAAA;");
      bw.write(line+"\n");
    } else {
      bw.write(line+"\n");
    }
  }
}
catch (Exception e) {
  return;
} finally {
  try {
    if(br != null){
      br.close();
      messagejLabel.setText("Error");
    }
  } catch (IOException e) {
  }
}
// Once everything is complete, delete old file..
File oldFile = new File(oldFileName);
oldFile.delete();

// And rename tmp file's name to old file name
File newFile = new File(tmpFileName);
newFile.renameTo(oldFile);

上記のコードを実行すると、空のファイル「tmpfiles.txt」とファイル「files.txt が削除されています。誰か助けてもらえますか? ファイルを読み取るために文字列を使用したくありません。彼のやり方でやってください。

4

3 に答える 3

3

簡単なテストで、上記のコメントで書いたようにライターを閉じないと、実際にあなたが説明する動作が発生することが確認されました。

追加するだけ

if (bw != null) {
  bw.close();
}

あなたのfinallyブロックに、そしてあなたのプログラムは動作します。

于 2012-11-21T14:55:18.447 に答える
1

あなたのコードに問題が見つかりました。

まず、この行は正しくないようです:

if (line.contains("Smokey")){
      line = line.replace("Smokey;","AAAAAA;");
      bw.write(line+"\n");

そのはず:

if (line.contains("Smokey;")){
      line = line.replace("Smokey;","AAAAAA;");
      bw.write(line+"\r\n");

そして、終了後にbwをフラッシュして閉じる必要があります。

if (bw != null){
    bw.flush();
    bw.close();
}

私が間違っている場合は修正してください。

于 2012-11-21T14:58:20.163 に答える
0

ライターが「フラッシュ」されたことがないため、ファイルに書き込まれることはありません。ライターを閉じると、バッファ内のすべてのデータが自動的にファイルに書き込まれます。try-catch ブロックでストリームを閉じる標準に慣れてください。

于 2012-11-21T14:56:18.937 に答える