存储空间(Bucket)开启分层命名空间后,您可以在该存储空间中创建目录(Directory)、重命名目录以及删除目录。本文介绍如何创建目录、重命名目录以及删除目录。

说明 关于存储空间开启分层命名空间的具体操作,请参见 创建存储空间

创建目录

以下代码用于在examplebucket中创建exampledir目录。

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "examplebucket";
// 填写目录绝对路径。目录绝对路径中不能包含Bucket名称。
String directoryName = "exampledir";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建目录。
CreateDirectoryRequest createDirectoryRequest = new CreateDirectoryRequest(bucketName, directoryName);
ossClient.createDirectory(createDirectoryRequest);

// 关闭OSSClient。
ossClient.shutdown();

关于创建目录的更多信息,请参见CreateDirectory

重命名目录

存储空间开启分层命名空间后,您可以在该存储空间中重命名目录。

以下代码将examplebucket中的exampledir目录重命名为newexampledir。

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "examplebucket";
// 填写源目录绝对路径。目录绝对路径中不能包含Bucket名称。
String sourceDir = "exampledir";
// 填写与源目录处于同一Bucket中的目标目录绝对路径。目录绝对路径中不能包含Bucket名称。
String destnationDir = "newexampledir";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 将存储空间中的源目录绝对路径重命名为目标目录绝对路径。
RenameObjectRequest renameObjectRequest = new RenameObjectRequest(bucketName, sourceDir, destnationDir);
ossClient.renameObject(renameObjectRequest);

// 关闭OSSClient。
ossClient.shutdown();

关于重命名的更多信息,请参见Rename

删除目录

存储空间开启分层命名空间后,您可以使用非递归删除或者递归删除方式删除该存储空间中的目录。

  • 非递归删除

    使用非递归方式删除目录时,您只能删除空目录。

    以下代码用于使用非递归方式删除examplebucket中的exampledir目录。

    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = "yourEndpoint";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    String accessKeyId = "yourAccessKeyId";
    String accessKeySecret = "yourAccessKeySecret";
    // 填写Bucket名称。
    String bucketName = "examplebucket";
    // 填写目录绝对路径。目录绝对路径中不能包含Bucket名称。
    String directoryName = "exampledir";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 删除目录, 默认为非递归删除。请确保已清空该目录下的文件和子目录。
    DeleteDirectoryRequest deleteDirectoryRequest = new DeleteDirectoryRequest(bucketName, directoryName);
    DeleteDirectoryResult deleteDirectoryResult = ossClient.deleteDirectory(deleteDirectoryRequest);
    
    // 删除的目录绝对路径。
    System.out.println("delete dir name :" + deleteDirectoryResult.getDirectoryName());
    // 本次删除的文件和目录的总数量。
    System.out.println("delete number:" + deleteDirectoryResult.getDeleteNumber());
    
    // 关闭OSSClient。
    ossClient.shutdown();
  • 递归删除

    使用递归方式删除目录时,您可以删除目录以及目录下的文件和子目录,请谨慎使用。

    以下代码用于使用递归删除方式删除examplebucket中的exampledir目录及该目录下的文件和子目录。

    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = "yourEndpoint";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    String accessKeyId = "yourAccessKeyId";
    String accessKeySecret = "yourAccessKeySecret";
    // 填写Bucket名称。
    String bucketName = "examplebucket";
    // 填写目录绝对路径。目录绝对路径中不能包含Bucket名称。
    String directoryName = "exampledir";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 使用递归删除方式删除目录。
    DeleteDirectoryRequest deleteDirectoryRequest = new DeleteDirectoryRequest(bucketName, directoryName);
    deleteDirectoryRequest.setDeleteRecursive(true);
    DeleteDirectoryResult deleteDirectoryResultossClient.deleteDirectory(deleteDirectoryRequest);
        
    // 查看删除结果。
    // 一次支持删除的目录和文件的总和为100个,当一次未删除完时,服务端会返回nextDeleteToken,此时您可以使用nextDeleteToken继续删除后面的数据。
    // nextDeleteToken用于服务端找到下一次删除的起点。
    String nextDeleteToken = deleteDirectoryResult.getNextDeleteToken();
    System.out.println("delete next token:" + nextDeleteToken);
    // 删除的目录绝对路径。
    System.out.println("delete dir name :" + deleteDirectoryResult.getDirectoryName());
    // 本次删除的文件和目录的总数量。
    System.out.println("delete number:" + deleteDirectoryResult.getDeleteNumber());
    
    // 关闭OSSClient。
    ossClient.shutdown();

关于删除目录的更多信息,请参见DeleteDirectory