Commons Virtual File System

VFS

Commons Virtual File System (VFS)提供了一种能够统一访问不同文件系统的抽象层。这个组件能够配置为同时连接一个或多个的文件系统。在Linux操作系统下也是比较容易的。

VFS支持下列文件系统:

  • Local files – 本地文件和文件夹(file://)
  • Zip, jar, tar, tgz, tbz2, gzip, bzip2 – 不同的压缩格式(zip://, jar://, etc.)
  • CIFS – Samba服务或Windows共享(smb://)
  • FTP – FTP服务器(ftp://)
  • HTTP和HTTPS (http://)
  • SFTP – SSH或SCP服务器(sftp://)
  • Temporary files (tmp://)
  • WebDAV – Web-based Distributed Authoring and Versioning (webdav://)
  • Resource from class loader – 使用ClassLoader获取类或其他资源(res://)

        这个组件对那些需要访问不同类型的文件系统的应用程序来说十分有用。举例来说:一个桌面搜索工具同这个框架非常类似。它提供用户搜索文件或文件的内容。另外一个例子就是集成Windows IE浏览器类似的功能到Java应用程序。

        范例应用程序是一个工具,它使用Commons VFS来在文件夹中查询Zip和Jar文件。应用程序没有提供用户界面,但是提供了一个测试用例来证明它能良好的工作。可以在in.co.narayanan.commons.vfs 找到范例和测试代码。按顺序运行范例应用程序,下载源码压缩包,运行Ant构建脚本来创建Commons VFS库。Ant脚本会自动下载其他依赖的库文件。最后通过JUnit测试来启动范例应用程序。[in.co.narayanan.commons.vfs.TestSearchBuddy ]

        最初的使用Commons VFS的想法是创建一个提供支持每种文件类型并能够由DefautFileSystemManager引用的Manager实例。为深层次的操作,需要通 过manager的resolveFile方法获取FileObject实例。Manager和FileObject提供了不同的方法,可以在 JavaDoc中找到他们的详细说明。下一段文字描述在搜索工具中如何使用Commons VFS API。

        清单6通过in.co.narayanan.commons.vfs.SearchBuddy类中初始化DefaultFileSystemManager类的代码片断。
 
清单6.初始化文件系统管理器
/**
 * Initialize the DefaultFileSystemManager to support
 * file, zip and jar providers. A virtual file system
 * is created and passed to the SearchableVirtualFileSystem
 * decorator class.
 *
 * @throws SearchException Error in initializing the file
 *       FileSystemManager
 */
private void init() throws SearchException {
 defFileSysMgr = new DefaultFileSystemManager();
 
 try {
 
  defFileSysMgr.addProvider("file", new DefaultLocalFileProvider());
  defFileSysMgr.addProvider("zip", new ZipFileProvider());
  defFileSysMgr.addProvider("jar", new JarFileProvider());
  defFileSysMgr.init();
 
  // 创建虚拟文件系统
  VirtualFileSystem vfs =
  (VirtualFileSystem)defFileSysMgr.createVirtualFileSystem("vfs://").getFileSystem();
 
  searchableVfs = new SearchableVirtualFileSystem(vfs);
   
 } catch (FileSystemException e) {
  throw new SearchException("Unable to initialize the FileSystemManager.", e);
 }
}
        高亮代码行为在文件系统中查询本地普通文件、zip文件、jar文件增加providers。这段代码创建一个VirtualFileSystem类的实例,这个类可以用来装备其它的文件系统。

        清单7时测试用例类TestSearchBuddy的代码片断,它说明范例应用程序如合查找文件。


 
清单7. 使用查询工具
/**
 * Adds the folder, zip, and a jar file to search
 *
 * @throws Exception Error in the test.
 */
public void testSearchInZips() throws Exception {
 SearchBuddy searchTool = new SearchBuddy();
 searchTool.addSearchableZip("testroot.zip");
 searchTool.addSearchableJar("testjar.jar");
 searchTool.addSearchableFolder(".");
  
 System.out.println("Searching for news.txt");
 searchTool.search("news", "txt");
  
 System.out.println("Searching for Range.class");
 searchTool.search("range", "class");
  
 System.out.println("Searching for test.xml");
 searchTool.search("test", "xml");
 
 System.out.println("Searching for *.properties");
 searchTool.search(null, "properties");
 searchTool.close();

}
 
        高亮部分代码行增加zip、jar文件到searchTool中。search方法通过加入要进行查询的文件名、扩展名来进行查询操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GAL游戏解包工具,含C++源码。 包含181个工具: alb2png amp2bmp ar2bugfix arkcmp2bmp brs2png d3dslide decrbrads decrddns2 decrkansa erisacvt ex1uparc ex4ag exafa exah3pac exakbdat exald exanepak exaos exaqugsp exar2 exarc2 exarc4 exarcw exatuworks exavk exbbbin exbelarc exbelldat_nosrc exbelldat1.02_nosrc exbkarc exbrdat_nosrc exbrpak exbsa exbszdat excandydat excatcab excdt excfarc exchpac excrxb exdaf2 exddp exdebopak exdieslib exdosnpac exdpk exdpmx exdxa exedendp5 exeiarc exescarc exfavbin exfigdat exfleurdat exfp3 exgce3 exgr2 exgsp4 exgxp exhappyend exhdcpak exhecdat exhud exhxp exiar exifdypf exiga exihkcap exisa exk5 exkactive exkhwag exkifint exkiss6dat exkizpak exkkesui exkleinpak exkoigdat exl4osa_nosrc exl5enj_nosrc exl6ren_nosrc exlac exlfa exlfar21 exlibiarc exlnk4 exlrlpk_nosrc exm2lib exmaiarc exmaotarc exmarupac_nosrc exmaspaz exmed exmespac exmhpac exmk2 exmnvdat exmoepack exmornpak exmpf2 exmpk exmpsaf exmugibin exmwpak exnfcel exnllpk_nosrc exnnkarc exnosdat_nosrc exnp4x exnpa exnpf exns2 exoozoarc expatbin expcf expdfpk expf2 expimg expkd expzdat exrlarc_nosrc exrrdat_nosrc exs4alf exscharc_nosrc exsec exsenarc_nosrc exsgnpa exshikidat exsholib exsteldat exsui2rom exszs extafarc extapak extarc extcd3 extensho extk2fpk extmmpck extricgf_nosrc extropak extskfdat exttd extttdpk extvkarc_nosrc exuni2 exunity exutsudat exvcpak exvff exvfs exwatfopck exwhaledat exwlcs exxusegd exyatpkg exykc exyox exzwarc_nosrc gax2png gyu2bmp junk_atled junk_monobeno kamiparadeck lpx2bmp mag2bmp miscbss misceri miscmja nimg2bmp pmchar2bmp ps2force480p spc2bmp sz2png tig2png tits2deck tox2deck toxtweak tpw2bmp_nosrc VisualMemory0.9.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值