Como posso criar novo File
(de java.io
) na memória, não no disco rígido?
Estou usando a linguagem Java. Não quero salvar o arquivo no disco rígido.
Estou diante de uma API ruim ( java.util.jar.JarFile
). Ele está esperando File file
de String filename
. Não tenho nenhum arquivo (apenas byte[]
conteúdo) e posso criar um arquivo temporário, mas não é uma solução bonita. Preciso validar o resumo de um frasco assinado.
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();
Todos os exemplos de como obter o manifesto sem criar um arquivo temporário serão bem-vindos.
File
?File
por definição, está no disco rígido.Respostas:
Para escrever em um fluxo, na memória, use:
fonte
Talvez você esteja confuso
File
eStream
:File
é uma representação abstrata de nomes de caminho de arquivo e diretório . Usando umFile
objeto, você pode acessar os metadados do arquivo em um sistema de arquivos e realizar algumas operações nos arquivos desse sistema, como excluir ou criar o arquivo. Mas aFile
classe não fornece métodos para ler e gravar o conteúdo do arquivo.Stream
objeto, comoFileInputStream
ouFileOutputStream
. Esses fluxos podem ser criados a partir de umFile
objeto e, em seguida, usados para ler e gravar no arquivo.Você pode criar um fluxo baseado em um buffer de bytes que reside na memória , usando ae
ByteArrayInputStream
aByteArrayOutputStream
para ler e gravar em um buffer de bytes de maneira semelhante à leitura e gravação de um arquivo. Abyte
matriz contém o conteúdo do "Arquivo". Você não precisa de umFile
objeto então.Tanto o
File...
e osByteArray...
fluxos de herdarjava.io.OutputStream
ejava.io.InputStream
, respectivamente, de modo que você pode usar a superclasse comum para esconder se você está lendo a partir de um arquivo ou de uma matriz de bytes.fonte
createTempFile
parajava.io.file
. Este arquivo pode ser definido para exclusão automática quando o teste de unidade termina.Você pode usar um sistema de arquivos na memória, como Jimfs
Aqui está um exemplo de uso do readme:
fonte