在我以前创建.csv文件并将其存储在运行应用程序的本地系统中之前,然后将其发送到AWS S3 Bucket。
现在,我不想在应用程序端创建任何文件。我想将数据直接作为.csv文件写入S3存储桶,这可能吗?
如果可能的话,请指导我该怎么做。
答案 0 :(得分:0)
有一种方法可以实现,我们必须将数据作为InputStream发送
就我而言,我做了以下更改:
[1]我将Bean类更新为Override toString()方法,如下所示
public class Employee{
String Id;
String employeeNo;
String name;
//get and set
@Override
public String toString() {
return "{"+ Id +","+ employeeNo + ","+ name + "}";
}
[2]我获取了数据列表并转换为List
List<Employee> employeeList=//get employee list
List<String[]> csvData = toStringArray(employeeList);
我的toStringArray()将返回List
private List<String[]> toStringArray(List<Employee> employeeList) {
List<String[]> records = new ArrayList<String[]>();
// adding header to csv
records.add(new String[] { "EmployeeId", "EmployeeNo", "Name"});
// add data to csv
Iterator<Employee> emp = employeeList.iterator();
while (emp.hasNext()) {
Employee data = emp.next();
records.add(new String[] { emp.getId(), emp.getEmployeeNo(), emp.getName() });
}
return records;
}
[3]现在,我将此数据转换为String
String strCsvData=writeCsvAsString(csvData);
我的writeCsvAsString()方法是
public String writeCsvAsString(List<String[]> csvData) {
StringWriter s = new StringWriter();
CSVWriter writer = new CSVWriter(s);
writer.writeAll(csvData);
try {
writer.close();
} catch (IOException e) {
}
String finalString = s.toString();
logger.debug("Actual data:- {}", finalString);
return finalString;
}
现在,我将此字符串转换为InputStream并将其与contentType元数据“ text / csv”
一起发送到S3存储桶InputStream targetStream = new ByteArrayInputStream(strCsvData.getBytes());