java.io.FileNotFoundException(只读文件系统)//上传文件到S3



我正试图从映射列表中创建csv文件,并通过lambda函数将它们上传到S3 bucket。以下是代码:

public void createCSV(List<Map<String, AttributeValue>> changedRecords, Context context, String tableName)
throws IOException {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String outputName = tableName + "_" + formatter.format(calendar.getTime()) + ".csv";
List<String> headers = changedRecords.stream().flatMap(map -> map.keySet().stream()).distinct()
.collect(Collectors.toList());
try (FileWriter writer = new FileWriter(outputName, true);) {
for (String string : headers) {
writer.write(string);
writer.write(",");
}
writer.write("rn");
for (Map<String, AttributeValue> lmap : changedRecords) {
for (Entry<String, AttributeValue> string2 : lmap.entrySet()) {
writer.write(string2.getValue().getS());
writer.write(",");
}
writer.write("rn");
}
}
catch (Exception e) {
e.printStackTrace();
}
s3.putObject(new PutObjectRequest("bucket_name", "data/" + outputName, outputName));
}

正在获取以下fileNotFound异常:

java.io.FileNotFoundException:data_20200227192207.csv(只读文件系统(位于java.io.FileOutputStream.open0(本机方法(位于java.io.FileOutputStream.open(FileOutputStream.java:270(位于java.io.FileOutputStream。(FileOutputStream.java:213(位于java.io.FileOutputStream。(FileOutputStream.java:133(位于java.io.FileWriter。(FileWriter.java:78(网址:com.amazonaws.lambda.demo.PLMLambda.createCSV(PLMLambda.java:84(网址:com.amazonaws.lambda.demo.PLMLambda.handleRequest(PLMLambda.java:54(网址:com.amazonaws.lambda.demo.PLMLambda.handleRequest(PLMLambda.java:1(在lambdainternal。EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:178(在lambdainternal。EventHandlerLoader$2.call(EventHandlerLoader.java:906(在lambdainternal。AWSLambda.startRuntime(AWSLambda.java:341(在lambdainternal。AWSLambda。(AWSLambda.java:63(位于java.lang.Class.forName0(本机方法(位于java.lang.Class.forName(Class.java:348(在lambdainternal。LambdaRTEntry.main(LambdaRTEntry.java:114(

更改行:

try (FileWriter writer = new FileWriter(outputName, true);) {

try (FileWriter writer = new FileWriter("/tmp" + outputName, true);) {

在Lambda中,您只能写入/tmp目录。

如果你的CSV内容不是那么大(比如4GB(,你可以简单地使用StringWriter而不是AWS Lambda的FileWriter,然后直接将字符串放入S3。

最新更新