【发布时间】:2016-06-14 22:13:54
【问题描述】:
我有一个 java 组件,它正在压缩一个 csv 文件并从 ByteArrayOutputStream 返回一个字节数组。我正在尝试将此传递给要写入操作系统的文件传输。文件已写入操作系统,但当我尝试打开该文件时,Windows 报告该文件无效。首先,是否可以将字节数组发送到文件传输?如果是这样,那么我想我可能不得不发布另一个问题,关于我在压缩 csv 内容时做错了什么......
这是java的sn-p:
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>
【问题讨论】:
-
在访问
dest.toByteArray()之前,您可能缺少out.flush()。 -
很遗憾,这不起作用。不过,谢谢。
-
@geert3 @GarySharpe 与其说是
out.flush(),不如说是之前的out.close()。您需要关闭 ZIP 流以进行正确的校验和计算,以便在缓冲区刷新“东西”之上计算并变为可刷新。 -
您可以尝试将字节数组写入您的 Java 组件中的文件吗?只是为了确保字节数组没问题。