5

FILE_ATTRIBUTE_TEMPORARY属性を持ち、 FILE_FLAG_DELETE_ON_CLOSEJava を使用して設定されるファイルを Windows で作成する方法は?

ファイルをメモリ内ファイルにしたいのですが。

正確には、アプリケーションのクラッシュなどの場合に一部のデータがディスクに残っている状況を避けたいため、終了時の削除メカニズムは私を満足させません。

4

5 に答える 5

4

このようなものを使用してください。ただし、インメモリにはなりませんが、アプリの終了時に削除される一時ファイルです。

try { 
   // Create temp file. 
   File temp = File.createTempFile("pattern", ".suffix"); 

   // Delete temp file when program exits.
   temp.deleteOnExit();

   // Write to temp file
   BufferedWriter out = new BufferedWriter(new FileWriter(temp));    
   out.write("aString");     
   out.close();
} catch (IOException e) { 
// (..)
} 
于 2010-05-25T10:34:08.860 に答える
2

メモリブロック、つまりデータ構造を使用しないのはなぜですか? ファイルを作成する動機は何ですか? スクラッチ ファイルが必要な場合は、一時ファイル終了時の削除が役立ちます。

于 2010-05-25T10:36:00.493 に答える
1

両方のフラグが設定されていても、ファイルがファイルシステムに配置される可能性があります。システム キャッシュが小さくなりすぎると、ファイルがディスクに書き込まれ、システムがクラッシュすると、後処理のクリーンアップは実行されません。

しかし、私はあなたのアイデアが好きで、なぜ Windows 上の JVM 実装がデフォルトでフラグを使用しないのか疑問に思っています。少なくとも deleteOnExit() は、フォールバックとしてこのように実装する必要があります。

于 2010-05-25T18:56:48.783 に答える
0

あなたはWindows固有のソリューションを求めているので、 Processbuilderを介して実行されるwndowsコマンドを使用してファイルを作成してみませんか.

于 2010-05-25T13:20:45.043 に答える
0

ファイルをメモリ内ファイルにしたいのですが。

Windows でファイルを一時的およびクローズ時に削除としてマークしても、ファイル システムに書き込まれないという保証はありません。

UNIX / Linux では、TmpFS または RamFS ファイル システムでファイルを作成できます。つまり、ファイルを RAM メモリに格納するファイル システムです。TmpFS は仮想メモリによってバックアップされるため、RamFS 内のファイルの一部またはすべてがスワップ ディスクに配置される可能性があります。RamFS は仮想メモリに支えられておらず、RAM にのみ常駐する必要があります。

RamFS と TmpFS の概要については、こちらを参照してください。

ただし、(少なくとも理論上は) RamFS コンテンツが最終的にディスクになる可能性があることに注意してください。

  • システムが休止状態になると、システムの電源がオフになる前に、RAM の内容全体がディスクに保存されます。

  • カーネルがクラッシュする可能性があり、カーネル クラッシュ ダンプが有効になっている場合、カーネル メモリの内容 (おそらく RamFS を含む) がダンプに書き込まれます。

于 2010-05-25T12:01:54.280 に答える