全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

列举文件(Java)

最近更新时间:2025-04-25 15:43:03

通过GET Bucket(ListObjects)列举文件

/**
 * 列出一个bucket下的object,最多返回1000条
 */
public void listObjectsSimple() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();

    try {
        // 获取桶下面的文件列表,最多返回1000条
        ObjectListing list = ks3Client.listObjects("<您的bucket名称>");
        // 遍历文件列表
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
            // 获取文件的其他信息
            // objectSummary.
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

/**
 * 将列出bucket下满足object key前缀为指定字符串的object,最多返回1000条
 */
public void listObjectsWithPrefix() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();

    try {
        // 根据前缀去获取桶的文件列表
        ObjectListing list = ks3Client.listObjects("<您的bucket名称>", "<object key前缀>");
        // 遍历文件列表
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
            // 获取文件的其他信息
            // objectSummary.
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

/**
 * 自己调节列出object的参数,
 */
public void listObjectsUseRequest() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();
    try {
        // 新建一个 ListObjectsRequest
        ListObjectsRequest request = new ListObjectsRequest("<您的bucket名称>");
        // 指定最多返回条数
        request.setMaxKeys(1000);
        // 指定前缀,将列举此前缀开头的 object,若没有设置前缀,则是列举所有 object
        request.setPrefix("<object key前缀>");
        // 设置文件分隔符,系统将根据该分隔符组织文件夹结构,如:"/"。
        // delimiter 不为空时,列举结果中只包含当前目录下的文件和目录,不包括子目录下的文件和目录。
        request.setDelimiter("<delimiter>");
        // 发送列举对象请求
        ObjectListing list = ks3Client.listObjects(request);
        for (String commonPrefix : list.getCommonPrefixes()) {
            // 获取文件夹的名字
            System.out.println("CommonPrefix: " + commonPrefix);
        }
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

/**
 * 使用循环列出所有object
 */
public void listAllObjects() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();
    try {
        // 初始化一个请求
        ListObjectsRequest request = new ListObjectsRequest("<您的bucket名称>");
        // 指定前缀,将列举此前缀开头的 object,若没有设置前缀,则是列举所有 object
        request.setPrefix("<object key前缀>");
        // 设置文件分隔符,系统将根据该分隔符组织文件夹结构,如:"/"。
        // delimiter 不为空时,列举结果中只包含当前目录下的文件和目录,不包括子目录下的文件和目录。
        request.setDelimiter("<delimiter>");
        while (true) {
            ObjectListing list = ks3Client.listObjects(request);
            for (String commonPrefix : list.getCommonPrefixes()) {
                // 获取文件夹的名字
                System.out.println("CommonPrefix: " + commonPrefix);
            }
            for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
                // 获取文件的名字
                System.out.println("Key: " + objectSummary.getKey());
                // 获取文件的存储类型
                System.out.println("  storageClass: " + objectSummary.getStorageClass());
            }
            // isTruncated 为 true 时表示之后还有 object,所以应该继续循环
            if (!list.isTruncated()) {
                break;
            }
            // 将结果中的 nextMarker 作为下次请求的 marker,以获取下页数据
            // 如果 nextMarker 为空,则将最后一个 object 的 key 作为下次请求的 marker
            String nextMarker = list.getNextMarker();
            if (StringUtils.isBlank(nextMarker)) {
                nextMarker = list.getObjectSummaries().get(list.getObjectSummaries().size() - 1).getKey();
            }
            request.setMarker(nextMarker);
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

1. 单次List,最多只可能返回1000个文件。如果需要返回更多,请通过marker参数设置游标。

2. 具体输入输出参数说明请参见文档:GET Bucket(list Object)

通过List Objects V2列举文件

/**
 * 列出一个bucket下的object,最多返回1000条
 * 创建ks3 client实例参见"初始化"文档
 */
public void listObjectsV2Simple() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();

    try {
        // 获取桶下面的文件列表,最多返回1000条
        ObjectListingV2 list = ks3Client.listObjectsV2("<您的bucket名称>");
        // 遍历文件列表
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
            // 获取文件的其他信息
            // objectSummary.
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

/**
 * 列出 bucket 下满足 object key 前缀为指定字符串的 object,最多返回1000条
 */
public void listObjectsV2WithPrefix() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();

    try {
        // 根据前缀去获取桶的文件列表
        ObjectListingV2 list = ks3Client.listObjectsV2("<您的bucket名称>", "<object key前缀>");
        // 遍历文件列表
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
            // 获取文件的其他信息
            // objectSummary.
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

/**
 * 自己调节列出object的参数,
 * 创建ks3 client实例参见"初始化"文档
 */
public void listObjectsV2UseRequest() {
    // 创建 Ks3Client 实例
    Ks3Client ks3Client = initKs3Client();

    try {
        // 新建一个 ListObjectsV2Request
        ListObjectsV2Request request = new ListObjectsV2Request("<您的bucket名称>");
        // 指定最多返回条数
        request.setMaxKeys(1000);
        // 返回以指定前缀开头的object
        request.setPrefix("<object key前缀>");
        // 设置文件分隔符,系统将根据该分隔符组织文件夹结构,如:"/"。
        // delimiter 不为空时,列举结果中只包含当前目录下的文件和目录,不包括子目录下的文件和目录。
        request.setDelimiter("<delimiter>");
        //执行操作
        ObjectListingV2 list = ks3Client.listObjectsV2(request);
        for (String commonPrefix : list.getCommonPrefixes()) {
            // 获取文件夹的名字
            System.out.println("CommonPrefix: " + commonPrefix);
        }
        for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
            // 获取文件的名字
            System.out.println("Key: " + objectSummary.getKey());
            // 获取文件的存储类型
            System.out.println("  storageClass: " + objectSummary.getStorageClass());
            // 获取文件的其他信息
            // objectSummary.
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}


/**
 * 使用循环列出所有object
 * 创建ks3 client实例参见"初始化"文档
 */
public void listAllObjectsV2(Ks3 client) {
    try {

        // 初始化一个请求
        ListObjectsV2Request request = new ListObjectsV2Request("<您的bucket名称>");
        // 返回以指定前缀开头的object
        request.setPrefix("<object key前缀>");
        // 设置文件分隔符,系统将根据该分隔符组织文件夹结构,如:"/"。
        // delimiter 不为空时,列举结果中只包含当前目录下的文件和目录,不包括子目录下的文件和目录。
        request.setDelimiter("<delimiter>");
        while(true) {
            ObjectListingV2 list = client.listObjectsV2(request);
            for (String commonPrefix : list.getCommonPrefixes()) {
                // 获取文件夹的名字
                System.out.println("CommonPrefix: " + commonPrefix);
            }
            for (Ks3ObjectSummary objectSummary : list.getObjectSummaries()) {
                // 获取文件的名字
                System.out.println("Key: " + objectSummary.getKey());
                // 获取文件的存储类型
                System.out.println("  storageClass: " + objectSummary.getStorageClass());
                // 获取文件的其他信息
                // objectSummary.
            }
            // isTruncated为true时表示之后还有object,所以应该继续循环
            if (list.isTruncated()) {
                // 将 NextContinuationToken 指定为下一次 ListObjectsV2 操作的 ContinuationToken,以继续获取结果。
                request.setContinuationToken(list.getNextContinuationToken());
            } else {
                break;
            }
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        client.shutdown();
    }
}

1. 单次List,最多只可能返回1000个文件。如果需要返回更多,请通过start-after参数设置游标。

2. 具体输入输出参数说明详见List Objects V2

通过Ks3ObjectListIterator列举文件

/**
 * 使用 ks3ObjectListIterator 列出对象
 */
public void listObjectsByIterator() {
    // 初始化 Ks3Client,参见“初始化”文档
    Ks3Client ks3Client = initKs3Client();

    try {
        // 初始化 ListObjectsV2Request 请求实例,更多参数用法参见“通过List Object V2列举文件”
        ListObjectsV2Request request = new ListObjectsV2Request("bucketName", "prefix");
        // 创建 ks3ObjectListIterator 实例
        Ks3ObjectListIterator ks3ObjectListIterator = ks3Client.newObjectListIterator(request);
        // 遍历 ks3 对象
        while (ks3ObjectListIterator.hasNext()) {
            ObjectListingV2 objectListing = ks3ObjectListIterator.next();
            System.out.println("truncated: " + objectListing.isTruncated());
            System.out.println("next continuation token: " + objectListing.getNextContinuationToken());
            for (String commonPrefix : objectListing.getCommonPrefixes()) {
                System.out.println("CommonPrefix: " + commonPrefix);
            }
            for (Ks3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                System.out.println("Key: " + objectSummary.getKey());
                System.out.println("  Size: " + objectSummary.getSize());
                System.out.println("  LastModified: " + objectSummary.getLastModified());
                System.out.println("  ETag: " + objectSummary.getETag());
                System.out.println("  StorageClass: " + objectSummary.getStorageClass());
            }
        }
    } catch (Ks3ServiceException e) {
        System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
        System.out.println("Error Message: " + e.getErrorMessage());
        System.out.println("Error Code: " + e.getErrorCode());
        System.out.println("Request ID: " + e.getRequestId());
    } catch (Ks3ClientException e) {
        System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
        System.out.println("Error Message: " + e.getMessage());
    } finally {
        // 不再使用时,关闭 Ks3Client
        ks3Client.shutdown();
    }
}

通过scanObjects列举文件

1. 仅支持递归列举指定前缀或桶内的全部文件,不支持仅列举当前目录下的文件。
2. 适用于指定桶或目录下有较多子目录,且子目录下文件数量多且均衡的情况。
3. delimiter仅用于并行扫描时分割object key作为扫描层级。

/**
 * 使用 Ks3ObjectsScanner 列出所有对象
 */
public void listObjectsByScanner() {
    // 初始化 Ks3Client,参见“初始化”文档
    Ks3Client ks3Client = initKs3Client();

    // 初始化 ScanObjectsRequest 请求实例
    ScanObjectsRequest request = new ScanObjectsRequest("bucketName", "prefix");
    // 设置并发数
    request.setParallel(3);
    // 设置并发扫描的最大深度
    request.setMaxDepthOfParallelism(1);
    // 初始化 ObjectSummaryHandler 实例,用于处理列举出的 ks3 对象
    ObjectSummaryHandler handler = new ObjectSummaryHandler() {
        @Override
        public void handle(Ks3ObjectSummary objectSummary) {
            System.out.println("Key: " + objectSummary.getKey());
            System.out.println("  Size: " + objectSummary.getSize());
            System.out.println("  LastModified: " + objectSummary.getLastModified());
            System.out.println("  ETag: " + objectSummary.getETag());
            System.out.println("  StorageClass: " + objectSummary.getStorageClass());
        }

        @Override
        public void onError(Exception err) {
            if (err instanceof Ks3ServiceException) {
                Ks3ServiceException e = (Ks3ServiceException) err;
                System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
                System.out.println("Error Message: " + e.getErrorMessage());
                System.out.println("Error Code: " + e.getErrorCode());
                System.out.println("Request ID: " + e.getRequestId());
            } else if (err instanceof Ks3ClientException) {
                Ks3ClientException e = (Ks3ClientException) err;
                System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
                System.out.println("Error Message: " + e.getMessage());
            } else {
                System.out.println("Error occurred: " + err.getMessage());
            }
        }
    };

    // 遍历 ks3 对象
    ks3Client.scanObjects(request, handler);
    // 不再使用时,关闭 Ks3Client
    ks3Client.shutdown();
}

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈