2016-06-13 3 views
0

私は、csvファイルを圧縮し、ByteArrayOutputStreamからバイト配列を返すjavaコンポーネントを持っています。私はOSに書き込まれるファイル転送にこれを渡そうとしています。ファイルがOSに書き込まれますが、ファイルを開くときにそのファイルが無効であるとWindowsから報告されます。まず、ファイル転送にバイト配列を送ることは可能ですか?もしそうなら、私はおそらく私が間違ったCSVファイルの内容をビュンやっていることについて、別の質問を投稿する必要がありますと思う...バイト配列をmule ESBのアウトバウンドファイルトランスポートに渡すことができます。

ここでのJavaの抜粋です:

List<String> csvFiles = (List<String>)message.getPayload(); 

    InputStream originalFile = null; 
    ByteArrayOutputStream dest = new ByteArrayOutputStream(); 
    ZipOutputStream out = new ZipOutputStream(dest); 

    File temp = new File("users.csv"); 
    originalFile = new 
     ByteArrayInputStream((csvFiles.get(0)).toString().getBytes()); 
    ZipEntry entry = new ZipEntry(temp.getPath()); 
    out.putNextEntry(entry); 
    int count; 
    while((count = originalFile.read()) != -1) { 
     out.write(count); 
    } 
    originalFile.close(); 
    byte[] zipFileByteArray = dest.toByteArray(); 
    out.close(); 
    dest.close(); 
    return zipFileByteArray; 

はここでは関係です私の流れの一部:

<flow name="zip-csv"> 
    <component class="edu.ucdavis.iet.canvas.ZipFiles" doc:name="Java"/> 
    <file:outbound-endpoint path="${message_archive.dir}" responseTimeout="10000" doc:name="save message to dir" outputPattern="temp.zip"/> 
</flow> 
+2

'dest.toByteArray()'にアクセスする前に 'out.flush()'が不足していると思います。 – geert3

+0

これはうまくいきませんでした。しかし、ありがとう。 – GarySharpe

+2

@ geert3 @GarySharpe以前は 'out.close()'よりも 'out.flush()'があまりありませんでした。バッファフラッシング "stuff"の上で、適切なチェックサム計算を計算してフラッシュ可能にするには、ZIPストリームを閉じる必要があります。 – GPI

答えて

関連する問題