ハードディスクではなくメモリに新しいFile
(Java.ioから)を作成するにはどうすればよいですか?
Java言語を使用しています。ファイルをハードドライブに保存したくありません。
悪いAPI(Java.util.jar.JarFile)に直面しています。 Stringファイル名のFileファイルが必要です。ファイルがなく(byte []コンテンツのみ)、一時ファイルを作成できますが、それは美しい解決策ではありません。署名済みjarのダイジェストを検証する必要があります。
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();
一時ファイルなしでマニフェストを取得する方法の例はありがたいです。
今、この質問はトピック外ではないと思います
メモリ内のストリームに書き込むには、次を使用します。
new ByteArrayOutputStream();
ハードディスクではなくメモリに新しいファイル(Java.ioから)を作成するにはどうすればよいですか?
多分あなたはFile
とStream
を混同しているでしょう:
File
は、ファイルとディレクトリの抽象的な表現pathnamesです。 File
オブジェクトを使用すると、ファイルシステム内のファイルメタデータにアクセスし、このファイルシステム上のファイルに対して、ファイルの削除や作成などの操作を実行できます。しかし、File
クラスは、ファイルの内容を読み書きするメソッドを提供しません。Stream
や FileInputStream
のようなFileOutputStream
オブジェクトを使用しています。これらのストリームは、File
オブジェクトから作成し、ファイルの読み取りと書き込みに使用できます。ByteArrayInputStream
と ByteArrayOutputStream
を使用して、メモリ内にあるバイトバッファーに基づいてストリームを作成できますファイルから読み書きするのと同様の方法で、byteバッファーからの書き込みおよび書き込みbyte
配列には、「ファイル」コンテンツが含まれます。その場合、File
オブジェクトは必要ありません。
File...
ストリームとByteArray...
ストリームの両方は、それぞれJava.io.OutputStream
とJava.io.InputStream
から継承するため、共通のスーパークラスを使用して、ファイルから読み取るか、バイト配列。
Java.io.StringWriterを使用できます。