如何获取具有父DataLakeDirectoryClient类实例的子文件/目录的列表

时间:2020-10-22 18:12:22

标签: java azure-data-lake-gen2

我必须扫描整个数据湖文件系统。代码如下:

PagedIterable<PathItem> pItems = ((DataLakeFileSystemClient)prmParent).listPaths();
for( PathItem pItem : pItems ){
  if pItem.isDirectory() ){
    ((DataLakeFileSystemClient)prmParent).getDirectoryClient(pItem.getName());
  } else {
    ((DataLakeFileSystemClient)prmParent).getFileClient(pItem.getName());
  }
}

我得到了顶级目录/文件。但是要进行深入研究,DataLakeDirectoryClient类中必须有方法listChild()。 但是我没有发现任何类似的东西。 有人知道走树的正确方法是什么吗?

谢谢。 Sergiy

1 个答案:

答案 0 :(得分:0)

如果要列出Azure数据湖gen2文件系统中的所有路径,请参考以下代码

 StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);
        String endpoint = String.format(Locale.ROOT, "https://%s.dfs.core.windows.net", accountName);
        DataLakeServiceClient storageClient = new DataLakeServiceClientBuilder()
                .endpoint(endpoint)
                .credential(credential)
                .buildClient();

        DataLakeFileSystemClient dataLakeFileSystemClient = storageClient.getFileSystemClient("test");
        ListPathsOptions options = new ListPathsOptions();
        options.setRecursive(true);
        PagedIterable<PathItem> pItems = dataLakeFileSystemClient.listPaths(options,null);

        for( PathItem pItem : pItems ){
            if(pItem.isDirectory()) {
                System.out.println("The directory: " +pItem.getName());
            }else{
                System.out.println("The file : " +pItem.getName());
            }
        }

enter image description here

有关更多详细信息,请参阅here