java.nio.file实现

mqkwyuun  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(156)

AWS是否有官方的java.nio.file实现?
我找到了一个GoogleCloudStoragehere,并需要类似的AWSAzure

erhoui1w

erhoui1w1#

您可以尝试使用Amazon AWS S3 FileSystem Provider JSR-203 for Java 7 (NIO2)

从Maven Central下载

<dependency>
    <groupId>com.upplication</groupId>
    <artifactId>s3fs</artifactId>
    <version>2.2.2</version>
</dependency>

在META-INF/services/java.nio.file.spi.FileSystemProvider(如果还不存在,请创建)中添加一行如下所示:com.upplication.s3fs.S3FileSystemProvider.

使用此代码创建fileSystem并设置为具体端点。

FileSystems.newFileSystem("s3:///", new HashMap<String,Object>(), Thread.currentThread().getContextClassLoader());

如何在Apache MINA中使用

public FileSystemFactory createFileSystemFactory(String bucketName) throws IOException, URISyntaxException {
    FileSystem fileSystem = FileSystems.newFileSystem(new URI("s3:///"), env, Thread.currentThread().getContextClassLoader());
    String bucketPath = fileSystem.getPath("/" + bucketName);

    return new VirtualFileSystemFactory(bucketPath);
}

Spring如何使用

添加到classpath并配置:

@Configuration
public class AwsConfig {

    @Value("${upplication.aws.accessKey}")
    private String accessKey;

    @Value("${upplication.aws.secretKey}")
    private String secretKey;

    @Bean
    public FileSystem s3FileSystem() throws IOException {
        Map<String, String> env = new HashMap<>();
        env.put(com.upplication.s3fs.AmazonS3Factory.ACCESS_KEY, accessKey);
        env.put(com.upplication.s3fs.AmazonS3Factory.SECRET_KEY, secretKey);

        return FileSystems.newFileSystem(URI.create("s3:///"), env, Thread.currentThread().getContextClassLoader());
    }
}

注入任意Spring组件:

@Autowired
private FileSystem s3FileSystem;
uz75evzq

uz75evzq2#

使用异步预读缓冲的FileSystemProvider SPI的实现有from githubfrom Maven Central。此库支持读取和写入。
您可以使用以下命令将其包含在Maven项目中:

<dependency>
    <groupId>software.amazon.nio.s3</groupId>
    <artifactId>aws-java-nio-spi-for-s3</artifactId>
    <version>1.2.1</version>
</dependency>

或者,您可以将JAR文件放在类路径上,JVM将把所有具有s3模式的URI路由到这个提供者。

vs3odd8k

vs3odd8k3#

常规

对于任何感兴趣的人来说,Upplication/Amazon-S3-FileSystem-NIO2在很久以前就被抛弃了。不再接受合并请求和修复。许多开发人员分叉它,并为自己的目的进行修复,然后这些分叉也死了。
我们决定做一个新的衍生项目--不是作为一个分支,而是作为一个名为s3fs-nio的新项目,它基于Upplication/Amazon-S3-FileSystem-NIO2master。你可以找到更多关于here的历史和推理。我们尝试从fork中收集一些更重要的修复,并将它们添加到我们的项目中(获得作者的许可)。
我们的衍生产品使用AWS SDK for Java 2.x版本,并在Apache 2.0许可证下运行。
配置文档可以在here中找到。
代码示例位于here
我们现在已经为org.carlspring.cloud.aws:s3fs-nio:1.0.0削减了一个版本,可以通过Maven Central(https://repo.maven.apache.org/maven2/)获得。这是我们的Release Notes
我们也在努力改进我们的documentation和贡献将受到高度赞赏。
我们欢迎您进行测试并报告任何发现!
对于那些有兴趣做出贡献的人,还有很多事情要做,我们非常乐意让你加入!

基本示例

下面是一个基本配置:

  • 添加相应的依赖项(您可以检查可用的版本here):
  • 对于Maven:
<dependency>
    <groupId>org.carlspring.cloud.aws</groupId>
    <artifactId>s3fs-nio</artifactId>
    <version>1.0.0</version>
</dependency>
  • 对于Gradle:
implementation 'org.carlspring.cloud.aws:s3fs-nio:1.0.0'
  • 使用服务定位器和amazon.properties文件在src/main/resources/amazon.properties中,添加以下设置:
s3fs.access.key=access-key
s3fs.secret.key=secret-key

使用以下代码创建FileSystem并将其设置为特定端点:

FileSystems.newFileSystem(URI.create("s3:///"),
                          new HashMap<>(),
                          Thread.currentThread()
                                .getContextClassLoader());

相关问题