そのため、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();
}