这是我的代码:
ByteArrayInputStream input = new ByteArrayInputStream(jsonArrayNew.toString().getBytes());
Long contentLength = Long.valueOf(jsonArrayNew.toString().getBytes().length);
ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentLength(contentLength);
s3.putObject(outputBucket,outputFile,input,metaData);
这就是我将文件写入Amazon S3的方式。但是,我需要在ArrayList
上写String
s3
ArrayList
。我无法浏览String
并将其字符串数据附加到String
,然后将其写入s3。为什么?因为StringBuffer
无法容纳那么多内容。它与StringBuilder
和ArrayList
相同。稍后阶段,我相信我必须将此LinkedList
转换为append
。
那么,无论如何我可以将BufferedWriter
数据放入s3对象中吗?就像{{1}}?
答案 0 :(得分:0)
我不知道这是否适合您的情况:
也许某个地方你可以找到一个更好的类(并且经过更好的测试)来做到这一点,但作为一个例子,这里是一个从字符串列表中读取数据的Reader:
class SReader extends Reader{
private Iterator<String> iterator;
private String currentLine;
public SReader(List<String> list){
this.iterator = list.iterator();
if(iterator.hasNext()){
this.currentLine = iterator.next();
}
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
if(!iterator.hasNext() && currentLine.isEmpty()){
return -1;
}
char c;int j = 0;
for(int i = 0; i<len; i++){
if(j < currentLine.length()){
c = currentLine.charAt(j);
j++;
}
else{
if(!iterator.hasNext()){
return i;
}
j = 0;
currentLine = iterator.next();
c = '\n';//currentLine.charAt(j);
}
cbuf[off + i] = c;
}
currentLine =currentLine.substring(j);
return len;
}
@Override
public void close() throws IOException {
}
}
您可以在代码中使用它:
List<String> d = Arrays.asList("asdasdasdasdasd", "asdasdasdas", "dasdasda", "dasdasassssssssssssssssssssssssssssssssssssssssssss");
int length = 0;
for(String s : d){
length += s.length() + 1; //I assume you want \n after each line
}
InputStream input = new ReaderInputStream(new SReader(d));
ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentLength(length);
s3.putObject(outputBucket,outputFile,input,metaData);
希望它有所帮助。