1

いくつかの回避策はありますが、本物に問題を提起したかったのです。

/uploadフォルダーにファイルをアップロードする外部サーバーがあり、java.nio.file.Filesアトミックムーブを使用してそれらを/destフォルダーにコピーし、移動したファイルを処理しています。

問題は、nio move の呼び出し後、ソース ファイルがまだソースにフラッシュされていないことは明らかですが、ムーブはアトミックに実行され、フラッシュされると、宛先のムーブ ファイルにフラッシュされます。

OSはUbuntuです。擬似は次のとおりです。

Path origFilePath = resolveOrigFilePath();
Path targetFilePath = resolveOrigFilePath();

//ロギングは、ソース内の空のファイルを示します。長さ = 0

   logger.warn("Atomic move file [{}], can read mode: [{}],can write mode: [{}] source size: [{}]",
            origFilePath, origFilePath.toFile().canRead(), origFilePath.toFile().canWrite(), origFilePath
                    .toFile().length());

//ファイルのアトミックムーブを実行

    Path target = Files.move(origFilePath, targetFilePath, StandardCopyOption.ATOMIC_MOVE);

//ロギングは空のファイルが移動されたことを示し、元のファイルはもう存在しません

    logger.warn(
            "Atomic moved file [{}] to [{}], target read mode: [{}], target write mode: [{}], target size: [{}], orig target size: [{}], is original exists [{}]",
            origFilePath, target, target.toFile().canWrite(), target.toFile().canRead(),
            target.toFile().length(), targetPath.toFile().length(), sensorFilePath.toFile().exists());

. . //まだ空の宛先ファイルを処理しています。. //しばらくすると、宛先ファイルにコンテンツが含まれますが、ファイルへの他のプログラムによるアクセスは行われません

. .

基礎となる実装の理由は何ですか?

4

1 に答える 1