AWS java 检索所有 S3 密钥的 maven 项目
AWS java maven project to retrieve all the S3 keys
我已经为我的 AWS java 开发创建了一个 Maven 项目。我正在尝试获取具有给定前缀的 S3 存储桶中所有文件的列表。
这是我的代码:
app.java:
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
class Main {
public static List<String> getObjectsListFromS3(AmazonS3 s3, String bucket, String prefix) {
final String delimiter = "/";
if (!prefix.endsWith(delimiter)) {
prefix = prefix + delimiter;
}
List<String> paths = new LinkedList<>();
ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucket).withPrefix(prefix);
ObjectListing result;
do {
result = s3.listObjects(request);
for (S3ObjectSummary summary : result.getObjectSummaries()) {
// Make sure we are not adding a 'folder'
if (!summary.getKey().endsWith(delimiter)) {
paths.add(summary.getKey());
}
}
request.setMarker(result.getMarker());
}
while (result.isTruncated());
return paths;
}
public static void main(String[] args) {
String bucket = "playground-us-east-1-1234567890";
AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion("us-east-1").build();
String prefix = "test";
for (String key : getObjectsListFromS3(s3, bucket, prefix)) {
System.out.println(key);
}
}
}
这是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.myapp</groupId>
<artifactId>myapp</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>myapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
当我尝试 运行 代码 mvn package
时,出现以下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myapp: Compilation failure
[ERROR] /home/user/Desktop/myapp/src/main/java/com/example/myapp/App.java:[35,41] diamond operator is not supported in -source 1.5
[ERROR] (use -source 7 or higher to enable diamond operator)
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
之前,我遇到了类似的错误,但我将 pom.xml
更改为 java version1 compatible。但是我不明白这个错误以及我哪里出错了
您正在为 Amazon S3 使用较旧的 API。您应该考虑转向 Java API V2。 V1 包名称是:
**com.amazonaws.services..**.
而 V2 包名称是:
**software.amazon.awssdk.services...**
亚马逊强烈建议迁移到 V2:
适用于 Java 2.x 的 AWS SDK 是对版本 1.x 代码库的重大重写。它建立在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在 运行 时间插入不同 HTTP 实现的能力。
您可以在此 Github 存储库中找到具有所需依赖项的 POM 文件:
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3
所有 S3 示例也位于此处。
更新
执行这些步骤以获得 Amazon S3 Java V2 代码示例 (ListObjects) 工作:
- 在类似 IntelliJ 的 IDE 中创建一个新的 Java Maven 项目。
- 从上面的 link 复制 POM 文件并将其放入您的 POM 文件。
- 创建一个名为 demo 的包。
- 在演示包中,创建一个名为 class 的 ListObjects。
- 从这里复制代码:
- 将此代码添加到您的 ListObjects class。
- 运行 代码并查看 IDE:
中的输出
我已经为我的 AWS java 开发创建了一个 Maven 项目。我正在尝试获取具有给定前缀的 S3 存储桶中所有文件的列表。
这是我的代码:
app.java:
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
class Main {
public static List<String> getObjectsListFromS3(AmazonS3 s3, String bucket, String prefix) {
final String delimiter = "/";
if (!prefix.endsWith(delimiter)) {
prefix = prefix + delimiter;
}
List<String> paths = new LinkedList<>();
ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucket).withPrefix(prefix);
ObjectListing result;
do {
result = s3.listObjects(request);
for (S3ObjectSummary summary : result.getObjectSummaries()) {
// Make sure we are not adding a 'folder'
if (!summary.getKey().endsWith(delimiter)) {
paths.add(summary.getKey());
}
}
request.setMarker(result.getMarker());
}
while (result.isTruncated());
return paths;
}
public static void main(String[] args) {
String bucket = "playground-us-east-1-1234567890";
AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion("us-east-1").build();
String prefix = "test";
for (String key : getObjectsListFromS3(s3, bucket, prefix)) {
System.out.println(key);
}
}
}
这是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.myapp</groupId>
<artifactId>myapp</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>myapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
当我尝试 运行 代码 mvn package
时,出现以下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myapp: Compilation failure
[ERROR] /home/user/Desktop/myapp/src/main/java/com/example/myapp/App.java:[35,41] diamond operator is not supported in -source 1.5
[ERROR] (use -source 7 or higher to enable diamond operator)
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
之前,我遇到了类似的错误,但我将 pom.xml
更改为 java version1 compatible。但是我不明白这个错误以及我哪里出错了
您正在为 Amazon S3 使用较旧的 API。您应该考虑转向 Java API V2。 V1 包名称是:
**com.amazonaws.services..**.
而 V2 包名称是:
**software.amazon.awssdk.services...**
亚马逊强烈建议迁移到 V2:
适用于 Java 2.x 的 AWS SDK 是对版本 1.x 代码库的重大重写。它建立在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在 运行 时间插入不同 HTTP 实现的能力。
您可以在此 Github 存储库中找到具有所需依赖项的 POM 文件:
https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3
所有 S3 示例也位于此处。
更新
执行这些步骤以获得 Amazon S3 Java V2 代码示例 (ListObjects) 工作:
- 在类似 IntelliJ 的 IDE 中创建一个新的 Java Maven 项目。
- 从上面的 link 复制 POM 文件并将其放入您的 POM 文件。
- 创建一个名为 demo 的包。
- 在演示包中,创建一个名为 class 的 ListObjects。
- 从这里复制代码:
- 将此代码添加到您的 ListObjects class。
- 运行 代码并查看 IDE: 中的输出