Windows временный файл в Java

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

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

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

5
задан ripper234 24 November 2011 в 14:19
поделиться

5 ответов

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

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

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

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

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

  • Если система переходит в спящий режим, все содержимое оперативной памяти сохраняется на диске до выключения системы.

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

0
ответ дан 14 December 2019 в 08:44
поделиться

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

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

1
ответ дан 14 December 2019 в 08:44
поделиться

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

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) { 
// (..)
} 
4
ответ дан 14 December 2019 в 08:44
поделиться

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

2
ответ дан 14 December 2019 в 08:44
поделиться

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

0
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: