web-dev-qa-db-ja.com

JavaのファイルからByteArrayInputStreamを作成する方法は?

Zip、RAR、txt、CSV、docなどの任意のファイルを使用できます。ByteArrayInputStreamを作成したいと思います。
Apache Commons NetからFTPClientを介してFTPにファイルをアップロードするために使用しています。

その方法を知っている人はいますか?

例えば:

String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());

私のコード:

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    ByteArrayInputStream in;

    return in;     
}
22
itro

FileUtils#readFileToByteArray(File) from Apache Commons IO 、および次に、 ByteArrayInputStream(byte[]) コンストラクターを使用してByteArrayInputStreamを作成します。

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}
35
npe

一般的な考え方は、ファイルがFileInputStreambyte[] a ByteArrayInputStreamを生成するというものです。両方ともInputStreamを実装するため、InputStreamをパラメーターとして使用するすべてのメソッドと互換性があります。

もちろん、すべてのファイルの内容をByteArrayInputStreamに入れることもできます:

  1. 完全なファイルをbyte[]に読み込みます; Java version> = 7には readAllBytesと呼ばれる便利なメソッド が含まれ、ファイルからすべてのデータを読み取ります。
  2. ファイルコンテンツの周りにByteArrayInputStreamを作成します。これは現在メモリ内にあります。

これは非常に大きなファイルには最適なソリューションではないことに注意してください-すべてのファイルは同じ時点でメモリに保存されます。ジョブに適切なストリームを使用することが重要です。

17
Maarten Bodewes

ByteArrayInputStreamは、バイト配列のInputStreamラッパーです。つまり、ファイルをbyte[]に完全に読み取ってから、ByteArrayInputStreamコンストラクターのいずれかを使用する必要があります。

ByteArrayInputStreamで実行していることの詳細を教えてください。あなたが達成しようとしていることを回避するより良い方法がある可能性があります。

編集:
Apache FTPClientを使用してアップロードする場合は、InputStreamが必要です。あなたはこれを行うことができます;

String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);

もちろん、入力ストリームを終了したら、忘れずに入力ストリームを閉じてください。

5
Qwerky

これはまさにあなたが求めているものではありませんが、バイト単位でファイルを高速に読み取る方法です。

File file = new File(yourFileName);
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"):
byte[] b = new byte[(int)file.length()];
try {
    ra.read(b);
} catch(Exception e) {
    e.printStackTrace();
}

//Then iterate through b
3
Sam Palmer

このコードは便利です。

private static byte[] readContentIntoByteArray(File file)
{
  FileInputStream fileInputStream = null;
  byte[] bFile = new byte[(int) file.length()];
  try
  {
     //convert file into array of bytes
     fileInputStream = new FileInputStream(file);
     fileInputStream.read(bFile);
     fileInputStream.close();
  }
  catch (Exception e)
  {
     e.printStackTrace();
  }
  return bFile;
}

参照: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-Java/

3
Buddy