2015-12-17 2 views
2

После нескольких лет кодирования со старым API File я, наконец, готов перепрыгнуть на весь поезд Path/Paths. По большей части, это прошло гладко, однако я в тупике по этому аспекту: временные файлы.Автоматически удалять временные файлы с помощью «нового» API файлов Java

Документация по java.nio.Files#createTempFile говорит:

Как с File.createTempFile методами, этот метод является лишь частью временного файла объекта. В случае использования в качестве рабочих файлов результирующий файл может быть открыт с использованием опции DELETE_ON_CLOSE, так что файл будет удален при вызове соответствующего метода close. В качестве альтернативы, для автоматического удаления файла может использоваться механизм выключения или механизм File.deleteOnExit().

Я не вижу, где указывается опция DELETE_ON_CLOSE. Использование крюка выключения невероятно неудобно (если я не думаю об этом неправильно). Стремясь избежать использования как Path объектов , так иFile объектов, я ищу решение, подобное File.deleteOnExit() для объекта Path, но, очевидно, тот, который не требует использования Path.toFile().[...].toPath() вида вызывающего шаблона.

Каков правильный способ реализации «самоуничтожающихся» временных файлов с использованием API java.nio.Files?

+1

'path.toFile() deleteOnExit()'? – assylias

+0

@assylias Я подумал об этом, но я думал, что это будет лучший способ сделать это. Метод 'toFile()' преобразуется в объект 'File', который является частью старого API. Это решение, которое я использую сейчас, но, как я уже сказал, я стараюсь избегать использования старого API. –

+1

Файл не устарел и нет ничего плохого в этом решении! Чтобы использовать опцию open, вы можете, например, использовать один из Files.newXxx, например newBufferedWriter. Но это может быть нецелесообразно для вашего случая использования. – assylias

ответ

2

Вы можете установить эту опцию, когда вы пишете, например:.

Path myTempFile = Files.createTempFile(...); 
Files.write(myTempFile, ..., StandardOpenOption.DELETE_ON_CLOSE); 
Смежные вопросы