Временный файл Windows на Java - PullRequest
5 голосов
/ 25 мая 2010

Как создать в Windows файл, который бы имел атрибуты FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE, установленные с помощью Java?

Я хочу, чтобы мой файл был просто файлом в памяти.

Точнее: механизм удаления при выходе меня не устраивает, потому что я хочу избежать ситуации, когда некоторые данные остаются на диске в случае, например, сбоя приложения.

Ответы [ 5 ]

4 голосов
/ 25 мая 2010

Используйте что-то вроде этого. Это не будет в памяти, но временный файл, который удаляется при выходе из приложения.

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) { 
// (..)
} 
2 голосов
/ 25 мая 2010

Почему бы просто не использовать блок памяти, то есть структуру данных? Что является стимулом для создания файла? Если вам нужен файл с нулями, то temp file и delete при выходе помогут.

1 голос
/ 25 мая 2010

Даже с обоими установленными флагами ваши файлы могут оказаться в файловой системе. Если системный кэш становится слишком маленьким, файл записывается на диск, а в случае сбоя системы очистка после обработки не выполняется.

Однако мне нравится ваша идея, и я удивляюсь, почему реализация JVM в Windows не использует флаги по умолчанию. По крайней мере deleteOnExit () должен быть реализован как резервный вариант.

0 голосов
/ 25 мая 2010

Вы ищете конкретное решение для Windows, так почему бы не создавать файлы, используя wndows команды, которые запускаются через Processbuilder.

0 голосов
/ 25 мая 2010

Я хочу, чтобы мой файл был просто файлом в памяти.

Пометка файла как временного и удаление при закрытии в Windows не гарантирует, что он не будет записан в файловую систему.

В UNIX / Linux вы можете создать файл в файловой системе TmpFS или RamFS; то есть файловая система, которая хранит файлы в оперативной памяти. TmpFS поддерживается виртуальной памятью, поэтому некоторые или все файлы в RamFS могут оказаться на диске подкачки. RamFS не поддерживается виртуальной памятью и должна постоянно находиться в оперативной памяти.

Обзор RamFS и TmpFS можно найти здесь .

Обратите внимание, что возможно (по крайней мере, теоретически) содержимое RamFS оказаться на диске.

  • Если система переводится в режим гибернации, все содержимое ОЗУ сохраняется на диске до выключения системы.

  • Если ядро ​​может быть вызвано сбоем и включены дампы сбоя ядра, содержимое памяти ядра (возможно, включая RamFS) будет записано в дамп.

...