Как я могу создавать новые File
(из java.io
) в памяти, а не на жестком диске?
Я использую язык Java. Я не хочу сохранять файл на жестком диске.
Я столкнулся с плохим API ( java.util.jar.JarFile
). Он ожидает File file
от String filename
. У меня нет файла (только byte[]
содержимое), и я могу создать временный файл, но это не красивое решение. Мне нужно проверить дайджест подписанной банки.
byte[] content = getContent();
File tempFile = File.createTempFile("tmp", ".tmp");
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(archiveContent);
JarFile jarFile = new JarFile(tempFile);
Manifest manifest = jarFile.getManifest();
Приветствуются любые примеры того, как получить манифест без создания временного файла.
File
?File
по определению находится на жестком диске.Ответы:
Для записи в поток в памяти используйте:
источник
Может вы сбиваете с толку
File
иStream
:File
- абстрактное представление путей к файлам и каталогам . ИспользуяFile
объект, вы можете получить доступ к метаданным файла в файловой системе и выполнить некоторые операции с файлами в этой файловой системе, например удалить или создать файл. НоFile
класс не предоставляет методов для чтения и записи содержимого файла.Stream
объект, напримерFileInputStream
илиFileOutputStream
. Эти потоки могут быть созданы изFile
объекта, а затем использоваться для чтения и записи в файл.Вы можете создать поток на основе байтового буфера, который находится в памяти , используя a
ByteArrayInputStream
и aByteArrayOutputStream
для чтения и записи в байтовый буфер аналогично тому, как вы читаете и пишете из файла.byte
Массив содержит содержимое «файла».File
Тогда вам не нужен объект.И потоки,
File...
иByteArray...
потоки наследуются отjava.io.OutputStream
иjava.io.InputStream
, соответственно, поэтому вы можете использовать общий суперкласс, чтобы скрыть, читаете ли вы из файла или из массива байтов.источник
createTempFile
дляjava.io.file
. Этот файл можно настроить на автоматическое удаление при выходе из модульного теста.Вы можете использовать файловую систему в памяти, такую как Jimfs
Вот пример использования из их readme:
источник