web-dev-qa-db-fra.com

Comment créer un nouveau fichier Java.io.File en mémoire?

Comment créer de nouveaux File (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 le fichier fichier de String nom de fichier. Je n'ai pas de fichier (seulement du contenu byte []) et peux créer un fichier temporaire, mais ce n'est pas une belle solution. J'ai besoin de valider le résumé du 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 manière d'obtenir un manifeste sans fichier temporaire serait apprécié.

Je pense que maintenant cette question n'est pas hors sujet

79
user1454686

Pour écrire dans un flux, en mémoire, utilisez:

new ByteArrayOutputStream();
27
haraldK

Comment créer un nouveau fichier (à partir de Java.io) en mémoire, pas sur le disque dur?

Peut-être que vous confondez File et Stream:

  • Un File est une représentation abstraite des chemins d'accès aux fichiers et aux répertoires . À l'aide d'un objet File, vous pouvez accéder aux métadonnées d'un 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 la classe File ne fournit pas de méthodes pour lire et écrire le contenu du fichier.
  • Pour lire et écrire à partir d'un fichier, vous utilisez un objet Stream, tel que FileInputStream ou FileOutputStream . Ces flux peuvent être créés à partir d'un objet File, puis être utilisés pour lire et écrire dans le fichier.

Vous pouvez créer un flux basé sur un tampon d’octets résidant dans la mémoire , en utilisant ByteArrayInputStream et un ByteArrayOutputStream pour lire et écrire dans un tampon d'octets de la même manière que vous lisiez et écriviez un fichier. Le tableau byte contient le contenu du "fichier". Vous n'avez pas besoin d'un objet File alors.

Tant le File... et le ByteArray... flux hérités de Java.io.OutputStream et Java.io.InputStream, respectivement, de sorte que vous puissiez utiliser la superclasse commune pour masquer si vous lisez à partir d'un fichier ou d'un tableau d'octets.

69
Andreas Fester

Vous pouvez utiliser un fichier Java.io.StringWriter.

0
Ingo