首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指定扩展名的递归文件搜索

问指定扩展名的递归文件搜索
EN

Stack Overflow用户
提问于 2018-12-27 02:58:25
回答 1查看 705关注 0票数 1

我使用SMBClient通过Java连接到我的中小企业服务器。

如何以递归方式扫描整个中小型企业共享,以获取扩展名为.mp4的所有文件的列表?

这是我的代码,它只扫描一个指定的目录:

代码语言:javascript
复制
private void btnFileCountActionPerformed(java.awt.event.ActionEvent evt) {
    SMBClient client = new SMBClient();
    try (Connection connection = client.connect("192.168.X.XXX")) {
        AuthenticationContext ac = new AuthenticationContext("XXXXXXX@hotmail.com", "XXXXXX".toCharArray(), "Mastafin");
        Session session = connection.authenticate(ac);

        try (DiskShare share = (DiskShare) session.connectShare("Folder With Spaces")) {
            for (FileIdBothDirectoryInformation f : share.list("LOTS OF SUBDIRS TO SCAN", "*.mp4")) {
                System.out.println("File : " + f.getFileName());
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    } catch (Exception e) {
        System.out.println(e);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-01 01:15:30

下面是一些相当简单的代码调整,可以让代码递归地填充ArrayList。这不一定是最有效的方法,因为它收集所有文件名,然后丢弃那些不以.mp4结尾的文件名,但它应该给您一个开始构建的简单位置。

代码语言:javascript
复制
private void btnFileCountActionPerformed(java.awt.event.ActionEvent evt) {
    try (SMBClient client = new SMBClient()) {
        try (Connection connection = client.connect(SERVER)) {
            AuthenticationContext ac = new AuthenticationContext(USERNAME, PASSWORD.toCharArray(), WORKGROUP);
            try (Session session = connection.authenticate(ac)) {
                try (DiskShare share = (DiskShare) session.connectShare(SHARE)) {
                    List<String> files = new ArrayList<>();
                    listFiles(share, START_DIR, files);
                    files.removeIf(name -> !name.toLowerCase().endsWith(".mp4"));
                    files.forEach(System.out::println);
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace(System.err);
    }
}

private void listFiles(DiskShare share, String path, Collection<String> files) {
    List<String> dirs = new ArrayList<>();
    String extPath = path.isEmpty() ? path : path + "\\";
    for (FileIdBothDirectoryInformation f : share.list(path)) {
        if ((f.getFileAttributes() & FileAttributes.FILE_ATTRIBUTE_DIRECTORY.getValue()) != 0) {
            if (!isSpecialDir(f.getFileName())) {
                dirs.add(f.getFileName());
            }
        } else {
            files.add(extPath + f.getFileName());
        }
    }
    dirs.forEach(dir -> listFiles(share, extPath + dir, files));
}

private static boolean isSpecialDir(String fileName) {
    return fileName.equals(".") || fileName.equals("..");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53936014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档