0

一時ファイルを作成して書き込み、既存のファイルを上書きしたい

  1. 一時ファイルの作成
  2. それを埋める
  3. 古いファイルを開く
  4. 古いファイルを新しいファイルと等しくする

ここに私のコードがありますが、機能していません

問題が見つかったらお知らせください。ありがとうございました!

try{
            //create a temporary file
            File temporary=File.createTempFile("tmp", "");
            BufferedWriter writer = new BufferedWriter(new FileWriter(temporary));
            //Write each line to file (temporary)
            for (String string : parsedArticlesToSave) {
                writer.write (String.format("%s\n", string));
            }
            //load old file
            File oldFile = new File("StringFile/ArticlesDB.txt");
            //replace old file with new file
            oldFile=temporary;
            //release resources
            writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
4

1 に答える 1

1

クラス java.io.File の概念全体を誤解していると思います

Javaでの変数代入の概念を理解していません。

このクラス java.io.File のオブジェクトを作成すると、ファイル上に一種のポインタが作成されるため、「全体」で操作できます。

したがって、「oldFile = temporary」で行ったことは、一時的なものを指すように oldFile へのポインターを作成しただけです。ただし、これは Java の変数割り当てのコンテキストでのみ行われ、実際のファイルシステムには影響しません。

次に、変数の割り当てについて。

オブジェクトでそれを取る: 2 つの整数があるとしましょう:

Integer a = 5;
Integer b = 10;

'b = a' を実行しても、実際にはオブジェクト b 自体は変更されませんが、代わりにオブジェクト b への参照がオブジェクト a への参照になります。オブジェクト b の古い値はまだメモリに格納されていますが、代入後は誰もそれを指していない (参照していない) ため、アクセスできなくなり、最終的にはガベージ コレクトされます。

解決策自体に関して:実際には、ファイルtempの内容を古い1行ごとにバイトごとにコピーする必要があります)、または古いファイルに同じ内容を持たせたいだけで、実際には必要ない場合一時ファイルを削除してから、一時ファイルの名前を「oldFile」に変更します。

Java で rename を使用する方法のリンクは次のとおりです。 Renaming in Java

お役に立てれば

于 2013-02-09T04:55:17.150 に答える