`

openfire源码解读第三节---java中的.pack文件转成jar文件

阅读更多

上一节我们阅读到了org.jivesoftware.openfire.starter.ServerStarter文件中的第90行,这节继续。

第90行调用unpackArchives(libDir, true);方法。

通过阅读该方法的英文注释大概意思是:转换文件夹中的一些包文件为一个标准的jar文件,在转换jar文件的同时每个被转的包文件就会被删除,如果包文件不存在,那么就什么都不做。

 

  • 过滤文件

带着这句话我们进行阅读。该方法传入了2个参数,第一个是一个lib文件夹,第二个参数是个boolean值true。

 

File [] packedFiles = libDir.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".pack");
    }
});
               
if (packedFiles == null) {
    // Do nothing since no .pack files were found
    return;
}

以上代码是unpackArchives方法中的146到155行的代码。

上面的第一句话我们大家应该很熟悉,没错,这句话我也经常用,但是我经常用不带参数的方法也就是一般这样用,

 

File [] packedFiles = libDir.listFiles();


这样是获取到一个文件夹下的所有的文件。

而带参数的根据字面意思大概是过滤文件名称的意思,就是过滤一定规则的文件,而不是显示所有的文件,

过滤用FilenameFilter这个接口,一般我们用接口都是通过继承的方法来使用,但是我们现在通过new的方式来使用,其实这种用法还是蛮多的,比如很多注册事件== 很多地方都大量运用了该方法。

但是new接口的时候我们会发现我们就要实现里面所有的方法,少一个方法都不可以。因为FilenameFilter接口只有一个方法accept所以我们在new的同时就会实现该方法,我们通过该方法直接过滤以某种后缀名的文件就可以了现在我们要列出.pack类型的文件所以我们应该写 return name.endsWith(".pack");就可以获取到了。很方便吧。

通过以上代码我们学习一个知识点,那就是获取某个文件夹下的某种格式的文件列表应该用FilenameFilter来实现,实现方法是一下代码

File [] packedFiles = libDir.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".pack");
    }
});

如果没有获取到.pack类型的文件那么什么都不做,直接返回。

  • 具体实现把.pack的文件转换为jar文件

    上面我们获取到了.pack的文件数据,然后开始遍历该数组,把每个.pack文件转为jar文件。

    关键代码如下

    InputStream in = new BufferedInputStream(new FileInputStream(packedFile));
    JarOutputStream out = new JarOutputStream(new BufferedOutputStream(
            new FileOutputStream(new File(libDir, jarName))));
    Pack200.Unpacker unpacker = Pack200.newUnpacker();
    // Print something so the user knows something is happening.
    if (printStatus) {
        System.out.print(".");
    }
    // Call the unpacker
    unpacker.unpack(in, out);
        
    in.close();
    out.close();
    packedFile.delete();
    unpacked = true;

     

以上的packedFile是遍历每个.pack的文件。就这样把.pack文件转为了jar文件。

1
1
分享到:
评论

相关推荐

    Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar

    Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar 。还有其他jar包请查看

    openfire3.10.1源码编译缺少的jar包

    openfire3.10.1源码编译缺少的jar包: jetty-websocket-8.1.17.v20150415 jnsapi mina-core-1.1.7-sources.jar mina-filter-compression-1.1.7-sources.jar mina-filter-ssl-1.1.7-sources.jar mina-filter-ssl.jar ...

    coherence.jar-coherence-work.jar-tangosol.jar-

    标题中的"coherence.jar-coherence-work.jar-tangosol.jar-"揭示了这是一组与Oracle Coherence相关的Java库文件。Coherence是Oracle公司提供的一种分布式数据管理解决方案,它主要用于实现高性能的数据缓存、数据...

    openfire源码缺少的bouncycastle.jar包

    解决这个问题的方法是将提供的"bcprov-ext-jdk15on-150.jar"、"bcprov-jdk15on-150.jar"和"bcpkix-jdk15on-150.jar"添加到Openfire的类路径中,确保Openfire运行时能够找到并使用这些库。这通常可以通过修改Openfire...

    [coherence.jar][coherence-work.jar][tangosol.jar]

    在给定的标题和描述中,提到了三个关键的JAR文件:`coherence.jar`、`coherence-work.jar`和`tangosol.jar`,它们在Openfire的源码配置中扮演着重要角色。 1. `coherence.jar`:这是Oracle Coherence的一个组成部分...

    coherence-work.jar,coherence.jar,tangosol.jar

    "coherence-work.jar, coherence.jar, tangosol.jar"这三个文件是Oracle Coherence数据网格产品的一部分,它们对于Openfire的高性能、高可用性和分布式数据管理至关重要。 首先,让我们逐一了解这些文件的作用: 1...

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    openfire webchat源码部署相关jar

    在部署Openfire WebChat时,需要用到一些特定的JAR文件,这些文件在描述中已经列出,包括jasper.jar、jasper-compiler-jdt.jar、jasper-el.jar和jasper-jdt.jar。这些文件在Java服务器页面(JSP)的编译和运行过程中...

    coherence.jar&coherence;-work.jar&tangosol;.jar

    本文将详细讨论标题中提及的三个重要jar包——`coherence.jar`、`coherence-work.jar` 和 `tangosol.jar`,以及它们在`openfire`开发配置中的作用。 `openfire`是一款开源的即时通讯(IM)服务器,它基于XMPP...

    coherence.jar-coherence-work.jar-tangosol.jar

    在这种情况下,关键的三个 jar 包是:`coherence.jar`、`coherence-work.jar` 和 `tangosol.jar`。这些 jar 文件对于 OpenFire 的正常运行至关重要,因为它们提供了必要的库支持和服务功能。 `coherence.jar` 是 ...

    openfire-3.6.2-1.i386.tar.gz

    openfire的linux安装版本,下载以后将文件上传到linux某文件夹下面,然后敲“tar –xzvf openfire-3.6.2-1.i386.tar.gz mv openfire /opt”命令完成安装。完成安装以后再敲“/etc/init.d/openfire /etc/init.d/...

    openfire-red5-spark-rtmps-required-files

    【标题】"openfire-red5-spark-rtmps-required-files" 涉及到的是一个针对企业内部通信的二次开发项目,它结合了Openfire、Red5和Spark这三款工具,以提供更加定制化的实时通信解决方案。 Openfire是一款开源的即时...

    openfire 4个jar包coherence 、coherence-work 、tangosol.jar、jackson

    在这个情况下,我们讨论的是四个关键的JAR包:`coherence.jar`、`coherence-work.jar`、`tangosol.jar`以及`jackson-all-1.9.0.jar`。 首先,`coherence.jar`是Oracle Coherence的主库文件,它是一个分布式数据管理...

    openfire3.10.2 源码需要的jar

    包含openfire3.10.2所需要的所有jar包;mina-filter-ssl-1.1.7-sources.jar slf4j-api-1.5.8-sources.jar slf4j-log4j12-1.5.8-sources.jar 等等

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 您可以上传小于60MB的文件

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发

    openfire源码配置需要的5个jar包

    openfire源码搭建所需要的5个包。pull-parser-2.1.10.jar、apache-ant-1.8.2.jar、coherence.jar、coherence-work.jar、tangosol.jar

    openfire3.10.2-源码需要的jar

    在开发或调试Openfire源码时,有时会遇到缺少必要的库文件,这些库通常以JAR(Java Archive)文件的形式存在。"openfire3.10.2-源码需要的jar"这个标题暗示了在使用Openfire 3.10.2版本的源代码时,可能遇到了一些...

    openfire 源码 Eclipse部署

    - 添加所有位于`openfire_src_3_5_1\build\lib`目录下的`.jar`文件; - 在“Source”标签页下添加`src\java`目录作为源代码路径; - 点击“Apply and Close”保存设置。 #### 四、处理编译问题 在导入项目并配置...

    dom4j-1.6.1.jar包和源码.zip

    dom4j.jar v1.6.1 和对应源码src.zip,用于 xml、openfire、xmpp 等 xml 解析,效率高、稳定

    openfire.jar最稳定的jar包

    这个"openfire.jar"文件是Openfire服务器的核心组件之一,扮演着至关重要的角色。它不仅提供了服务器的基本功能,还包含了用于处理账户加密解密的机制。 在Openfire中,用户账户的安全性是至关重要的。为了确保数据...

Global site tag (gtag.js) - Google Analytics