web-dev-qa-db-ja.com

メモリに新しいJava.io.Fileを作成する方法は?

ハードディスクではなくメモリに新しい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();

一時ファイルなしでマニフェストを取得する方法の例はありがたいです。

今、この質問はトピック外ではないと思います

79
user1454686

メモリ内のストリームに書き込むには、次を使用します。

new ByteArrayOutputStream();
27
haraldK

ハードディスクではなくメモリに新しいファイル(Java.ioから)を作成するにはどうすればよいですか?

多分あなたはFileStreamを混同しているでしょう:

  • File は、ファイルとディレクトリの抽象的な表現pathnamesです。 Fileオブジェクトを使用すると、ファイルシステム内のファイルメタデータにアクセスし、このファイルシステム上のファイルに対して、ファイルの削除や作成などの操作を実行できます。しかし、Fileクラスは、ファイルの内容を読み書きするメソッドを提供しません。
  • ファイルを読み書きするには、 StreamFileInputStream のようなFileOutputStreamオブジェクトを使用しています。これらのストリームは、Fileオブジェクトから作成し、ファイルの読み取りと書き込みに使用できます。

ByteArrayInputStreamByteArrayOutputStream を使用して、メモリ内にあるバイトバッファーに基づいてストリームを作成できますファイルから読み書きするのと同様の方法で、byteバッファーからの書き込みおよび書き込みbyte配列には、「ファイル」コンテンツが含まれます。その場合、Fileオブジェクトは必要ありません。

File...ストリームとByteArray...ストリームの両方は、それぞれJava.io.OutputStreamJava.io.InputStreamから継承するため、共通のスーパークラスを使用して、ファイルから読み取るか、バイト配列。

69
Andreas Fester

Java.io.StringWriterを使用できます。

0
Ingo