我尝试从AWS S3读取一个文件到我的Java代码:
File file = new File("s3n://mybucket/myfile.txt");
FileInputStream fileInput = new FileInputStream(file);
然后我得到一个错误:
java.io.FileNotFoundException: s3n:/mybucket/myfile.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
有没有办法从AWS S3打开/读取文件?非常感谢!
6条答案
按热度按时间mkshixfv1#
Java中的“File”类无法理解S3的存在。Here's an example of reading a file from the AWS documentation:
j0pj023g2#
在2019年,有一种更优化、更稳健的方式来从S3读取文件:
一定要注意关于这段代码的内存使用的注解。
eqoofvh93#
我们也可以使用
software.amazon.awssdk:s3
ar7v8xwq4#
在java中读取S3文件的步骤可以是:
1.创建AmazonS3客户端。
1.使用存储桶名称和键创建S3Object。
1.使用S3Object创建缓冲区读取器并逐行读取文件。
1〉〉〉
2〉〉〉
3〉〉〉
谢谢。
ifmq2ha25#
如果文件的内容是字符串,则可以使用getObjectAsString,否则可以使用
getObjectContent()
上的IOUtils.toByteArray将文件的内容读入字节数组。显然,这些最好用在比较小的S3对象上,这样可以很容易地放入内存。
wtlkbnrh6#
这是我的解决方案。我使用的是 Spring Boot 2.4.3
创建amazon s3客户端
创建一个亚马逊转账客户端。
在**/tmp/{your-s3-key}**中创建一个 * 临时文件 *,以便我们可以将下载的文件放在此文件中。
然后,我们使用传输管理器客户端从s3下载文件
现在,s3文件已经成功地传输到我们创建的 * 临时文件 * 中,我们可以获取 * 临时文件 * 的InputStream。
因为不再需要 * 临时文件 *,所以我们将其删除。