2012-06-27 13 views
18

ZIP、RAR、txt、CSV、docなどのファイルがあります。ByteArrayInputStreamを作成したいと思います。
私は、Apache Commons NetのFTPClientを通じてFTPにファイルをアップロードしています。JavaのファイルからByteArrayInputStreamを作成するには?

誰かがそれを行う方法を知っていますか?例えば

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

マイコード:

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

    return in;  
} 
+0

。私はこれをバイト単位でファイルを読むための非常に速い方法であると感じました。 –

+3

なぜこれを行う必要がありますか?これを行うには、FileInputStreamをByteArrayOutputStreamにコピーし、それからByteArrayInputStreamを作成します。もちろんそれは無意味です。 –

+0

あなたのユースケースを説明してください。おそらくFileInputStreamだけが必要になるでしょう。どのようにしたらそれを使うのですか? –

答えて

28

Apache Commons IOからFileUtils#readFileToByteArray(File)を使用して、ByteArrayInputStream(byte[])コンストラクタを使用してByteArrayInputStreamを作成します。

public static ByteArrayInputStream reteriveByteArrayInputStream(File file) { 
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file)); 
} 
+16

私の答えに記載されているように、Java 7には既にFilesクラスにreadFileToByteArrayが含まれています。追加のライブラリは必要ありません。 –

+6

実際、Java 7では、 'Files.readAllBytes' –

13

一般的な考え方は、ファイルがFileInputStreambyte[]ByteArrayInputStreamをもたらすだろうということです。両方ともInputStreamを実装しているため、パラメータとしてInputStreamを使用する任意のメソッドと互換性があります。 ByteArrayInputStreamにファイルの内容のすべてを置く

はもちろん行うことができます。

  1. byte[]に完全なファイルを読み込みます。 Java version> = 7には、ファイルからすべてのデータを読み取るためのconvenience method called readAllBytesが含まれています。
  2. ファイルコンテンツの周囲にByteArrayInputStreamを作成します。これは現在メモリに保存されています。

これは非常に大きなファイルに対しては最適ではない可能性があることに注意してください。すべてのファイルは同じ時点でメモリに保存されます。仕事に正しい流れを使うことが重要です。

3

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

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 
+0

できればコードを完成してください。 – itro

4

ByteArrayInputStreamは、バイト配列の周りのInputStreamラッパーです。つまり、ファイルを完全にbyte[]に読み込んだ後、ByteArrayInputStreamコンストラクタの1つを使用する必要があります。

あなたはByteArrayInputStreamで何をしているのかについてさらに詳しく説明できますか?おそらくあなたが達成しようとしているものの周りには良い方法があります。

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

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

入力ストリームを終了したら、入力ストリームを閉じてください。

+0

私はそれを使用してftpにFTPClientコモンズのApacheを通してファイルをアップロードしています。 – itro

+0

@itro - FTPClientの詳細で自分の答えを更新しました – Qwerky

1

コードのこの作品は便利来る:

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; 
} 

参考:私はのRandomAccessFileを使用し、最初のバイト配列にファイル全体のバイトを転送バイト単位でのファイルの読み込みについてはhttp://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/

関連する問題