将CSV文件写入S3存储桶,而不将其存储在本地

时间:2020-10-07 06:43:22

标签: amazon-web-services amazon-s3

在我以前创建.csv文件并将其存储在运行应用程序的本地系统中之前,然后将其发送到AWS S3 Bucket。

现在,我不想在应用程序端创建任何文件。我想将数据直接作为.csv文件写入S3存储桶,这可能吗?
如果可能的话,请指导我该怎么做。

1 个答案:

答案 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());