所以我使用Java SDK解决方案CloudFiles下载到本地主机:hereInputStream为空? openStream的原因是什么?
我能够找到一个测试容器,列出其中的内容和访问/写文件。但是当我写他们时,他们没有来自原始文件的任何数据。他们只是外壳(0KB)。他们不是大文件,当我打电话给方法openStream()
创建InputStream
...我打电话给read()
,并且它立即让我回到-1
表明它已经到达文件末尾。不知道为什么。这里有一些代码可以帮助解释:
ObjectList object = objectApi.list();
for (int x = 0; x < testContainer.getObjectCount(); x++){
SwiftObject object2 = object.get(x);
InputStream inputStream = object2.getPayload().openStream();
System.out.println(inputStream.read()); <-- giving me -1
System.out.println(inputStream.available()); <-- giving me 0
String objectName = object2.getName();
System.out.println(objectName);
}
这只是错误检查。一切似乎与我TestContainer工作... ...它会告诉我所有的文件夹/文件中,当我创建:
Payload pl = object2.getPayload();
System.out.println(pl.getMetaData());
它显示我的CONTENTLENGTH匹配(以及几乎匹配)文件的大小...所以我想我的SwiftObject正在建造好与object.get(x)
....
不知道为什么我返回零字节时,我打电话read()
,虽然......它似乎是。 openStream不工作...任何帮助非常赞赏ED!
和公正的情况下,以某种方式与我的其他代码的问题,这里要说的是:
InputStream inputStream = object2.getPayload().openStream();
String objectName = object2.getName();
System.out.println(objectName);
if (objectName.contains(".")){
File newFile = new File("C:\\Users\\-----\\temp\\" + objectName);
newFile.getParentFile().mkdirs();
FileOutputStream outputStream = new FileOutputStream(newFile);
byte[] aByte = IOUtils.toByteArray(inputStream);
IOUtils.write(aByte, outputStream); //also tried IOUtils.copy(inputStream, outputStream);
inputStream.close();
outputStream.close();
}
什么是你的jclouds版本?您是否尝试用卷曲等不同工具复制失败? – zacksh