`
alartin
  • 浏览: 209913 次
社区版块
存档分类
最新评论

Apache VFS(7): 文件管理器解析文件的方法

    博客分类:
  • VFS
阅读更多
一般来说,我们使用Apache VFS时,直接从VFS对象获得的文件管理器是StandardFileSystemManager,StandardFileSystemManager从DefaultFileSystemManager继承而来。而解析文件在DefaultFileSystemManager中完成。
绝大部分时候,你会提供一个URI来定位你的文件系统,例如:ftp://yourftp/rootdir或者http://yourweb/rootdir或者file://c:/rootdir
,然后你将这个字符串作为参数传给StandardFileSystemManger, 这时候DefaultFileSystemManger的resolveFile方法负责处理URI的解析,并且最终返回一个FileObject文件对象。我们看一下这个方法:
这个方法有5种重载方式,分别接受不同的参数,但核心方法只有一个:

/**
     * Resolves a URI, realtive to a base file with specified FileSystem
     * configuration
     */
    public FileObject resolveFile(final FileObject baseFile, final String uri,
            final FileSystemOptions fileSystemOptions)
            throws FileSystemException
    {
        final FileObject realBaseFile;
        if (baseFile != null && VFS.isUriStyle()
                && baseFile.getName().getType() == FileType.FILE)
        {
            realBaseFile = baseFile.getParent();
        }
        else
        {
            realBaseFile = baseFile;
        }
        // TODO: use resolveName and use this name to resolve the fileObject

        UriParser.checkUriEncoding(uri);

        if (uri == null)
        {
            throw new IllegalArgumentException();
        }

        // Extract the scheme
        final String scheme = UriParser.extractScheme(uri);
        if (scheme != null)
        {
            // An absolute URI - locate the provider
            final FileProvider provider = (FileProvider) providers.get(scheme);
            if (provider != null)
            {
                return provider.findFile(realBaseFile, uri, fileSystemOptions);
            }
            // Otherwise, assume a local file
        }

        // Handle absolute file names
        if (localFileProvider != null
                && localFileProvider.isAbsoluteLocalName(uri))
        {
            return localFileProvider.findLocalFile(uri);
        }

        if (scheme != null)
        {
            // An unknown scheme - hand it to the default provider
            if (defaultProvider == null)
            {
                throw new FileSystemException("vfs.impl/unknown-scheme.error",
                        new Object[]
                        { scheme, uri });
            }
            return defaultProvider.findFile(realBaseFile, uri,
                    fileSystemOptions);
        }

        // Assume a relative name - use the supplied base file
        if (realBaseFile == null)
        {
            throw new FileSystemException("vfs.impl/find-rel-file.error", uri);
        }

        return realBaseFile.resolveFile(uri);
    }
分享到:
评论

相关推荐

    commons-vfs-2.0.zip

    Apache Commons VFS(Virtual File System)是一个开源Java库,它为不同的文件系统提供了一个统一的接口。这个库允许开发者以相同的方式处理各种类型的文件系统,包括本地文件、FTP、HTTP、ZIP、JAR等。VFS是Virtual...

    commons-vfs-2.1源码

    7. **扩展性**:Apache Commons VFS的设计允许添加新的文件系统提供者,开发者可以通过实现相关的接口和类,轻松地扩展其功能以支持新的文件系统类型。 8. **线程安全**:由于VFS可能在多线程环境中使用,因此它的...

    commons-vfs-1.0.zip

    4. **URI解析器**:VFS使用URI(统一资源标识符)来表示文件路径,通过URI解析器可以将URI转换为相应的FileObject。 5. **配置和属性**:VFS允许通过配置文件或编程方式设置各种参数,如连接超时、认证信息等。 在...

    java Ftp服务器 源码

    5. **虚拟文件系统(VFS)**:Apache FtpServer支持虚拟文件系统,允许服务器访问不同类型的存储系统,如本地文件系统、云存储等。VFS抽象了文件操作,提供了一致的接口。 6. **配置管理**:FtpServer可以通过XML...

    linux操作系统考试试卷(含答案)J.doc

    **解析**:Linux 通过虚拟文件系统(Virtual File System,VFS)支持多种文件系统类型,包括但不限于 FAT、NTFS、ISO9660 和 Ext 系列。**Ext 系列** 是 Linux 最常用的文件系统之一,它包括了 Ext2、Ext3 和 Ext4 ...

    linux的考试复习题

    27. **VFS支持的文件系统**:ext2、ext3、ext4、FAT、NTFS等。 28. **进程状态**:运行、就绪、阻塞,可通过`ps`命令查看。 29. **内核引导文件**:如vmlinuz。 30. **CD-ROM文件系统类型**:ISO 9660。 31. **...

    数据仓库 工具kettle

    - **Apache虚拟文件系统(VFS)支持**:Kettle支持Apache VFS,使得文件操作更加灵活。 - **转换步骤类型**:Kettle提供了多种内置的步骤类型,包括但不限于: - **文本文件输入(TextInput)**:用于读取纯文本...

    IT系统工程师面试题

    #### 问题7:服务器管理 使用自动化工具如Ansible、Puppet进行批量部署和管理。 #### 问题8:团队管理 建立明确的目标,划分职责,鼓励沟通协作,定期培训提升技能。 #### 问题9:Linux系统优化 - 使用top命令...

    FTPS JDK1.4

    5. `commons-vfs-2.0.jar`:Apache Commons VFS(Virtual File System),提供了一种抽象层来访问不同的文件系统,包括FTP和FTPS,使得代码可以独立于具体的文件系统进行操作。 6. `commons-httpclient-3.1.jar`:...

    kettle手册

    - **Apache虚拟文件系统(VFS)支持:** 通过 VFS,Kettle 可以访问分布式文件系统中的文件。 - **转换步骤类型:** - **文本文件输入(TextInput):** 从文本文件中读取数据。 - **表输入(Table Input):** 从...

    OpenCms.7.Development ebook

    OpenCms的核心组件包括Content Manager(内容管理器)、VFS(虚拟文件系统)和Alkacon OCEE(OpenCms企业增强版),这些组件在内容管理、文件存储和企业级功能扩展方面发挥着重要作用。 接着,书中的章节将引导读者...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs 虚拟文件系统 httpcomponents-client 和 http 协议客户端一起协作的框架 httpcomponents-core ...

    ETL工具kettle用户手册

    **9.5 Apache虚拟文件系统(VFS)支持** Kettle 支持 Apache VFS,可以轻松处理多种文件系统协议。 **9.6 转换步骤类型** 接下来的部分详细介绍了各种类型的转换步骤,包括但不限于: - **9.6.1 文本文件输入...

    Jakarta commons docs API CHM 格式

    commons-validator 提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则 commons-vfs 虚拟文件系统 httpcomponents-client 和 http 协议客户端一起协作的框架 httpcomponents-core ...

    Kettle初学者教程 自学版

    **9.5 Apache虚拟文件系统(VFS)支持** Kettle支持Apache VFS,这意味着它可以透明地处理各种文件系统协议,如FTP、SFTP、HTTP等。 **9.6 转换步骤类型** - **9.6.1 文本文件输入(TextInput)**:从文本文件中...

    APR Virtual File System-开源

    在实际应用中,APR-VFS可以用于各种场景,例如,开发一个能够处理多种归档格式的文件管理工具,或者在Web服务器中实现动态压缩和解压缩功能,以提高网络传输效率。此外,对于需要频繁处理归档文件的系统,如备份和...

    ETL工具Kettle用户手册

    ##### 9.5 Apache虚拟文件系统(VFS)支持 Kettle支持Apache VFS,这使得它可以处理各种类型的文件系统,包括FTP、SFTP、WebDAV等。 ##### 9.6 转换步骤类型 Kettle提供了丰富的转换步骤类型,涵盖了从数据读取到...

Global site tag (gtag.js) - Google Analytics