¿Cómo puedo crear nuevos File
(desde java.io
) en la memoria, no en el disco duro?
Estoy usando el lenguaje Java. No quiero guardar el archivo en el disco duro.
Me enfrento a una API incorrecta ( java.util.jar.JarFile
). Se espera File file
de String filename
. No tengo ningún archivo (solo byte[]
contenido) y puedo crear un archivo temporal, pero no es una solución hermosa. Necesito validar el resumen de un frasco firmado.
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();
Se agradecería cualquier ejemplo de cómo lograr obtener un manifiesto sin crear un archivo temporal.
File
?File
por definición está en el disco duro.Respuestas:
Para escribir en una secuencia, en la memoria, use:
fuente
Tal vez estés confundido
File
yStream
:File
es una representación abstracta de nombres de rutas de archivos y directorios . Con unFile
objeto, puede acceder a los metadatos del archivo en un sistema de archivos y realizar algunas operaciones en los archivos de este sistema de archivos, como eliminar o crear el archivo. Pero laFile
clase no proporciona métodos para leer y escribir el contenido del archivo.Stream
objeto, comoFileInputStream
oFileOutputStream
. Estos flujos se pueden crear a partir de unFile
objeto y luego se pueden usar para leer y escribir en el archivo.Puede crear una secuencia basada en un búfer de bytes que reside en la memoria , utilizando ay
ByteArrayInputStream
aByteArrayOutputStream
para leer y escribir en un búfer de bytes de la misma manera que lee y escribe desde un archivo. Labyte
matriz contiene el contenido del "Archivo".File
Entonces no necesitas un objeto.Tanto el
File...
y lasByteArray...
corrientes heredan dejava.io.OutputStream
yjava.io.InputStream
, respectivamente, por lo que puede utilizar la superclase común para ocultar si se está leyendo desde un archivo o de una matriz de bytes.fuente
createTempFile
parajava.io.file
. Este archivo se puede configurar para que se borre automáticamente cuando finalice la prueba unitaria.Podría usar un sistema de archivos en memoria, como Jimfs
Aquí hay un ejemplo de uso de su archivo Léame:
fuente