首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内部VFS文件共用VFS中查找文件

在内部VFS文件共用VFS中查找文件
EN

Stack Overflow用户
提问于 2017-05-30 11:50:32
回答 1查看 598关注 0票数 0

是否可以使用FileObject::findFiles方法或类似于存储在文件夹中的ZIP文件中的搜索?还是我必须自己打开拉链文件?

代码语言:javascript
复制
FileObject root = vfs.resolveFile(file:///home/me/test/vfsdir);
// shows everything except the content of the zip 
FileObject[] allFiles = root.findFiles(Selectors.SELECT_ALL);    
// should contain only the three xmls
FileObject[] xmlFiles = root.findFiles(xmlSelector);

VFS目录-树

代码语言:javascript
复制
/ (root)
/folderwithzips
/folderwithzips/myzip.zip (Zipfile not a folder)
/folderwithzips/myzip.zip/myfile.xml
/folderwithzips/myzip.zip/myfile2.xml
/folderwithzips/other.zip 
/folderwithzips/other.zip/another.xml
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-02 12:53:35

遗憾的是,不可能在VFS中搜索zip的内容,就好像它们是文件夹一样。

因此,我必须手动加载每个zip并在内容上执行我的选择器。

这个小方法对我来说很管用。

代码语言:javascript
复制
public static void main(String[] vargs) throws FileSystemException {
    FileSystemManager manager = VFS.getManager();
    FileObject root = manager.resolveFile("/home/me/test/vfsdir");

    List<FileObject> files = findFiles(root, new XMLSelector());
    files.stream().forEach(System.out::println);
}

public static List<FileObject> findFiles(FileObject root,FileSelector fileSelector) throws FileSystemException {
    List<FileObject> filesInDir = Arrays.asList(root.findFiles(fileSelector));
    FileObject[] zipFiles = root.findFiles(new ZipSelector());

    FileSystemManager manager = VFS.getManager();

    List<FileObject> filesInZips = new ArrayList<>();
    for (FileObject zip: zipFiles){
        FileObject zipRoot = manager.createFileSystem(zip);
        Stream.of(zipRoot.findFiles(fileSelector)).forEach(filesInZips::add);
    }

    return Stream.concat(filesInDir.stream(),filesInZips.stream()).collect(Collectors.toList());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44261472

复制
相关文章

相似问题

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