You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为JSON Parser提供S3文件引用?两种方式均报FileNotFoundException

解决S3文件JSON解析时的FileNotFoundException问题

嗨,我来帮你搞定这个报错!你遇到的java.io.FileNotFoundException本质原因很简单:FileReader这个类只能读取本地文件系统里的文件,它完全不支持S3存储桶路径或者HTTP URL这两种资源形式,所以才会找不到文件。

先给你拆解下两种尝试方式的问题:

  • 第一种用bucket+"/"+key作为路径:S3的存储桶和对象键并不是本地磁盘的文件路径,FileReader会把它当成你电脑本地的文件夹/文件去查找,自然找不到对应的资源。
  • 第二种直接传S3的HTTP URL:FileReader只认识本地文件的路径格式,根本不懂HTTP协议的资源地址,所以同样会报错。

正确的解决方法

你需要借助AWS SDK来获取S3对象的输入流,再把这个流传给JSON解析器。下面给你两种常用SDK版本的示例:

方式1:使用AWS SDK v2(推荐,最新版本)

// 初始化S3客户端(记得替换成你的区域)
S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).build();

// 构造获取对象的请求
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
        .bucket("你的存储桶名称")
        .key("你的对象键")
        .build();

// 获取S3对象的输入流
InputStream s3InputStream = s3Client.getObject(getObjectRequest);

// 解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(new InputStreamReader(s3InputStream));

// 生产环境建议用try-with-resources自动关闭资源,这里手动示例
s3InputStream.close();
s3Client.close();

方式2:使用AWS SDK v1

如果你还在使用旧版SDK,可以这么写:

// 初始化S3客户端
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

// 获取S3对象
S3Object s3Object = s3Client.getObject("你的存储桶名称", "你的对象键");
InputStream s3InputStream = s3Object.getObjectContent();

// 解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(new InputStreamReader(s3InputStream));

// 关闭资源
s3InputStream.close();
s3Object.close();
s3Client.shutdown();

备选方案:通过HTTP URL获取流(不推荐生产环境)

如果一定要用S3的HTTP URL来获取资源,可以用URL类打开连接获取输入流,但这种方式没有SDK的签名、重试等机制,权限处理也麻烦,只适合测试场景:

URL s3Url = new URL("你的S3对象HTTP URL");
InputStream urlInputStream = s3Url.openStream();

JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(new InputStreamReader(urlInputStream));

urlInputStream.close();

内容的提问来源于stack exchange,提问作者Sachin Kasliwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:17:44