所以我正在使用 Java SDK 解决方案将 CloudFiles 下载到本地主机:这里
我能够找到一个测试容器,列出其中的内容并访问/写入文件。但是当我写它们时,它们没有原始文件中的任何数据。它们只是外壳(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 不起作用......非常感谢任何帮助!
以防万一我的其他代码有问题,这里是:
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();
}