0

ファイルの内容を変更しているため、ファイルを 1 行ずつ読み取り、必要なものを置き換えて、1 行ずつ一時ファイルに書き込みます。ファイル全体が処理されたら、元のファイルを削除し、一時ファイルの名前を元のファイル名に変更します。このような

File orginialFile = new File("C:\\java\\workspace\\original.xml");
File tempFile = File.createTempFile("tempfile", ".tmp", new File(C:\\java\\workspace\\"));
while ((str_String = reader.readLine()) != null) {
//read lines and replace and write lines
}
orginialFile .delete();     
tempFile.renameTo(new File("C:\\java\\workspace\\original.xml"));

これが完了したら、一時ファイルの絶対パス (tempFile.getAbsolutePath();) を要求します。しかし、これにより、 c:\java\workspace\original.xml の代わりに c:\java\workspace\tempfile3729727953777802965.tmp (プログラムの実行ごとに番号が変わります) が得られます。

どうして?

私はそれをデバッグし、絶対パスを要求する直前に c:\java\workspace (Windows エクスプローラー) をチェックインしましたが、tempfile はありません。オリジナルファイルのみ。

したがって、プロセスは正しく実行されます。名前が変更された絶対パスが表示されない理由を知りたかっただけです。(ログに使用します)

どうも

4

3 に答える 3

1

reader.close()削除前に欠品があります。おそらく私たちのために編集されています。また、次のことができます。

tempFile.renameTo(originialFile);
于 2013-05-14T09:28:51.740 に答える
1

のドキュメントでは、パッケージとの相互運用性java.io.Fileの前に:java.nio.file

File クラスのインスタンスは不変です。つまり、一度作成されると、File オブジェクトによって表される抽象パス名は変更されません。

したがって、名前が変更された絶対パスは表示されません。

于 2013-05-14T09:12:04.910 に答える
0

renameTo() からの戻り値を確認しましたか? 私はそれが間違っているのではないかと疑っています。

また、 API ドキュメントにも注意してください。ファイルシステム間の移動など、多くのことがうまくいかない可能性があると述べています。

Files.move の方が良いかもしれません

于 2013-05-14T09:17:15.657 に答える