Wie kann ich neue erstellen File
(ausjava.io
) im Speicher , nicht auf der Festplatte?
Ich benutze die Java-Sprache. Ich möchte die Datei nicht auf der Festplatte speichern.
Ich bin mit einer schlechten API ( java.util.jar.JarFile
) konfrontiert . Es erwartet File file
von String filename
. Ich habe keine Datei (nur byte[]
Inhalt) und kann temporäre Dateien erstellen, aber es ist keine schöne Lösung. Ich muss den Digest eines signierten Glases validieren.
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();
Alle Beispiele, wie Sie erreichen können, ohne eine temporäre Datei zu erstellen, sind willkommen.
File
?File
per Definition auf der Festplatte.Antworten:
Verwenden Sie zum Schreiben in einen Stream im Speicher:
quelle
Vielleicht sind Sie verwirrend
File
undStream
:File
ist eine abstrakte Darstellung von Datei- und Verzeichnispfadnamen . Mithilfe einesFile
Objekts können Sie auf die Dateimetadaten in einem Dateisystem zugreifen und einige Vorgänge für Dateien in diesem Dateisystem ausführen, z. B. Löschen oder Erstellen der Datei. Aber dieFile
Klasse bietet jedoch keine Methoden zum Lesen und Schreiben des Dateiinhalts.Stream
Objekt wieFileInputStream
oderFileOutputStream
. Diese Streams können aus einemFile
Objekt erstellt und dann zum Lesen und Schreiben in die Datei verwendet werden.Sie können einen Stream basierend auf einem Bytepuffer erstellen, der sich im Speicher befindet , indem Sie a
ByteArrayInputStream
und a verwendenByteArrayOutputStream
, um aus einem Bytepuffer zu lesen und in einen Bytepuffer zu schreiben, ähnlich wie Sie aus einer Datei lesen und schreiben. Dasbyte
Array enthält den Inhalt der "Datei". Sie brauchen dann keinFile
Objekt.Sowohl die
File...
und dieByteArray...
Ströme erben vonjava.io.OutputStream
undjava.io.InputStream
jeweils so , dass Sie die gemeinsamen übergeordneten Klasse zu verstecken können , ob Sie aus einer Datei oder von einer Byte - Array lesen.quelle
createTempFile
fürjava.io.file
. Diese Datei kann so eingestellt werden, dass sie beim Beenden des Komponententests automatisch gelöscht wird.Sie können ein In-Memory-Dateisystem wie Jimfs verwenden
Hier ist ein Anwendungsbeispiel aus ihrer Readme-Datei:
quelle