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
Pour écrire dans un flux, en mémoire, utilisez:
new ByteArrayOutputStream();
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
:
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.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.
Vous pouvez utiliser un fichier Java.io.StringWriter.