列举文件

更新时间: 2020-03-24

目录

简单列举文件

通过前缀列举文件

自定义参数列举文件

本节介绍如何列举文件。

OSS文件按照字母顺序排列。您可以通过ossClient.listObjects列出存储空间下的文件。listObjects有以下三类参数格式:

  • ObjectListing listObjects(String bucketName):列举存储空间下的文件。最多列举1000个文件。
  • ObjectListing listObjects(String bucketName, String prefix): 列举存储空间下指定前缀的文件。最多列举1000个文件。
  • ObjectListing listObjects(ListObjectsRequest listObjectsRequest):提供多种过滤功能,实现灵活的查询功能。

ObjectListing的参数如下:

参数 描述 方法
objectSummaries 限定返回的文件元信息 List getObjectSummaries()
prefix 本次查询结果的前缀 String getPrefixes()
bucketName 存放这些文件的存储桶的名字 String getBucketName()
delimiter 对文件名称进行分组的一个字符 String getDelimiter()
marker 标明本次列举文件的起点 String getMarker()
maxKeys 列举文件的最大个数 int getMaxKeys()
nextMarker 下一次列举文件的起点 String getNextMarker()
isTruncated 指明列举文件是否被截断。列举完没有截断,返回值为false。没列举完就有截断,返回值为true boolean isTruncated()
commonPrefixes 以delimiter结尾,且有共同前缀的文件集合 List getCommonPrefixes()

简单列举文件

以下代码用于简单列举文件:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//列举所有文件
ObjectListing objectListing = ossClient.listObjects(bucketName);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
    System.out.print("\t" + objectSummary.getKey());
}

通过前缀列举文件

以下代码用于通过前缀列举文件:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
String prefixObjectName = "*** Provide object name prefix ***";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//列举所有前缀为<prefixObjectName>文件
ObjectListing objectListing = ossClient.listObjects(bucketName, prefixObjectName);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
    System.out.print("\t" + objectSummary.getKey());
}

自定义参数列举文件

通过设置ListObjectsReques的参数可以实现灵活的查询功能。ListObjectsReques的参数如下:

参数 描述 方法
bucketName 存放需要列举文件的存储桶名称 setBucketName(String bucketName)
prefix 限定返回的文件必须以prefix作为前缀 setPrefix(String prefix)
marker 列举指定marker之后的文件 setDelimiter(String delimiter)
delimiter 对文件名称进行分组的一个字符。所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素(commonPrefixes) setMarker(String marker)
maxKeys 限定此次列举文件的最大个数。默认值为1000,最大值为1000 setMaxKeys(Integer maxKeys)
encodingType 请求响应体中文件名称采用的编码方式,目前仅支持url setEncodingType(String encodingType)

以下代码用于通过ListObjectsRequest列举文件:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
String keyPrefix = "<yourkeyPrefix>";

// 设置最大个数。
final Integer maxKeys = 10;

//列举指定marker之后的文件。默认列举100个文件。
String marker = "<yourMarker>";

//设置对文件名称进行分组(分层)的一个字符,例如:aasd|sd,设置delimiter为'|',相当于aasd是sd的父目录
String delimiter = "/";

// 指定文件名称编码
String encodingType = "utf-8";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//最多列出maxKeys个当前桶下面前缀为prefixObjectName,开始位置为maker,分层格式为delimiter的桶,并且文件名称编码为encodingType
ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix, marker, delimiter, maxKeys, encodingType);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
    System.out.print("\t" + objectSummary.getKey());
}