Как создать файл в Windows, который имел бы атрибуты FILE_ATTRIBUTE_TEMPORARY
и FILE_FLAG_DELETE_ON_CLOSE
набор с помощью Java?
Я действительно хочу, чтобы мой файл был просто файлом в оперативной памяти.
К точному: удалите на выходе механизм, не удовлетворяет меня, потому что я хочу избежать ситуации, когда некоторые данные оставляют на диске в случае, например, сбой приложения.
Я хочу, чтобы мой файл был только в памяти.
Пометка файла как временного и удаление при закрытии в Windows не гарантирует, что он не будет записан в файловую систему.
В UNIX / Linux вы можете создать файл в файловой системе TmpFS или RamFS; т.е. файловой системе, которая хранит файлы в памяти RAM. TmpFS поддерживается виртуальной памятью, поэтому часть или весь файл в RamFS может оказаться на диске подкачки. RamFS не поддерживается виртуальной памятью и должна храниться только в оперативной памяти.
Обзор RamFS и TmpFS можно найти здесь.
Обратите внимание, что содержимое RamFS может оказаться на диске (по крайней мере, теоретически).
Если система переходит в спящий режим, все содержимое оперативной памяти сохраняется на диске до выключения системы.
Если ядро может быть спровоцировано на крах и включены дампы краха ядра, содержимое памяти ядра (возможно, включая RamFS) будет записано в дамп.
Даже с обоими установленными флагами ваши файлы могут оказаться в файловой системе. Если системный кэш становится слишком маленьким, файл записывается на диск, а если система падает, то очистка после процесса не производится.
Однако мне нравится ваша идея и интересно, почему реализация JVM в Windows не использует флаги по умолчанию. По крайней мере, deleteOnExit() должна быть реализована подобным образом в качестве запасного варианта.
Используйте что-то вроде этого. Однако это будет не в памяти, а временный файл, который удаляется при выходе из приложения.
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) {
// (..)
}
Почему бы просто не использовать блок памяти, то есть структуру данных? Что побудило создать файл? Если вам нужен рабочий файл, тогда помогут временный файл и удалить при выходе .
Вам нужно решение для Windows, так почему бы не создавать файлы с помощью команд wndows , выполняемых через Processbuilder.