Comment puis-je créer un nouveau File
(à partir de java.io
) en mémoire, pas sur le disque dur?
J'utilise le langage Java. Je ne veux pas enregistrer le fichier sur le disque dur.
Je suis confronté à une mauvaise API ( java.util.jar.JarFile
). Il attend File file
de String filename
. Je n'ai pas de fichier (uniquement du byte[]
contenu) et je peux créer un fichier temporaire, mais ce n'est pas une belle solution. Je dois valider le condensé d'un pot signé.
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();
Tout exemple sur la façon d'obtenir un manifeste sans créer de fichier temporaire serait apprécié.
File
?File
par définition est sur le disque dur.Réponses:
Pour écrire dans un flux, en mémoire, utilisez:
la source
Peut-être que vous êtes déroutant
File
etStream
:File
est une représentation abstraite des chemins de fichiers et de répertoires . À l'aide d'unFile
objet, vous pouvez accéder aux métadonnées de fichier dans un système de fichiers et effectuer certaines opérations sur les fichiers de ce système de fichiers, comme supprimer ou créer le fichier. Mais laFile
classe ne fournit pas de méthodes pour lire et écrire le contenu du fichier.Stream
objet, commeFileInputStream
ouFileOutputStream
. Ces flux peuvent être créés à partir d'unFile
objet, puis être utilisés pour lire et écrire dans le fichier.Vous pouvez créer un flux basé sur un tampon d'octets qui réside en mémoire , en utilisant a
ByteArrayInputStream
et aByteArrayOutputStream
pour lire et écrire dans un tampon d'octets de la même manière que vous lisez et écrivez à partir d'un fichier. Lebyte
tableau contient le contenu du «fichier». Vous n'avez donc pas besoin d'unFile
objet.Les
File...
et lesByteArray...
flux héritent dejava.io.OutputStream
etjava.io.InputStream
, respectivement, afin que vous puissiez utiliser la superclasse commune pour masquer si vous lisez à partir d'un fichier ou d'un tableau d'octets.la source
createTempFile
pourjava.io.file
. Ce fichier peut être configuré pour être supprimé automatiquement à la fin du test unitaire.Vous pouvez utiliser un système de fichiers en mémoire, tel que Jimfs
Voici un exemple d'utilisation de leur readme:
la source