对象存储服务 OBS-列举多版本对象(Java SDK):代码示例:递归列出子文件夹中多版本对象

时间:2024-01-26 15:48:31

代码示例:递归列出子文件夹中多版本对象

递归列出子文件夹中多版本对象的函数listVersionsByPrefix的示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
    // 递归列出子文件夹中多版本对象
    static void listVersionsByPrefix(ObsClient obsClient, ListVersionsResult result) throws ObsException {
        for (String prefix : result.getCommonPrefixes()) {
            System.out.println("Objects in folder [" + prefix + "]:");
            ListVersionsRequest request = new ListVersionsRequest("examplebucket", 1000);
            request.setDelimiter("/");
            request.setPrefix(prefix);
            result = obsClient.listVersions(request);
            for (VersionOrDeleteMarker v : result.getVersions()) {
                System.out.println("Key:" + v.getKey());
                System.out.println("Owner:" + v.getOwner());
                System.out.println("isDeleteMarker:" + v.isDeleteMarker());
            }
            listVersionsByPrefix(obsClient, result);
        }
    }
}
  • 以上代码示例不包含文件夹中多版本对象数超过1000个的情况。
  • 由于是需要列举出文件夹中的对象和子文件夹,且文件夹对象总是以“/”结尾,因此delimiter总是为“/”。
  • 每次递归的返回结果中ListVersionsResult.getVersions包含的是文件夹中的多版本对象;ListVersionsResult.getCommonPrefixes包含的是文件夹的子文件夹。
support.huaweicloud.com/sdk-java-devg-obs/obs_21_1007.html