`
13146489
  • 浏览: 252006 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

拷贝jar包的文件

    博客分类:
  • java
 
阅读更多
1、最近将程序打包成jar的时候才出现个文件:

我将一个配置文件放在了classpath下,程序获取classpath路径后便使用了commons-io的fileutils.copy方法将该文件拷贝到system32下。

该程序在ide环境中云高兴没有问题,但是当我把程序打包成jar时,程序运行失败。

后来查资料才知道要将打包成jar中的文件拷贝到jar外,必须首先将文件从jar中解压出来,然后才能进行拷贝。

后来在jnative中查看源代码的时候,发现它有一个从jar包中拷贝dll到java-libary-path的代码。

该方法在JNative.java中:
private static void loadFromJar() throws UnsatisfiedLinkError
    {
        File tempDir = new File(System.getProperty("user.dir"));
        File dllFile = new File(tempDir, DLL_NAME);
        // Thubby: This returns null for me!
        //InputStream in = JNative.class.getResourceAsStream("../../../lib-bin/" + DLL_NAME);
        InputStream in = JNative.class.getResourceAsStream("/lib-bin/" + DLL_NAME);
        if (in == null)
        {
            if (!dllFile.exists())
            {
                throw new UnsatisfiedLinkError(DLL_NAME + " : unable to find in " + tempDir);
            }
        }
        else
        {
            if (dllFile.exists() && dllFile.canWrite())
            {
                dllFile.delete();
            }
            if (!dllFile.exists())
            {
                byte[] buffer = new byte[512];
                BufferedOutputStream out = null;
                try
                {
                    try
                    {
                        out = new BufferedOutputStream(new FileOutputStream(dllFile));
                        while (true)
                        {
                            int readed = in.read(buffer);
                            if (readed > -1)
                            {
                                out.write(buffer, 0, readed);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    finally
                    {
                        if (out != null)
                        {
                            out.close();
                        }
                    }
                }
                catch (IOException e)
                {
                    throw new UnsatisfiedLinkError("Can't write library in " + dllFile);
                }
            }
            System.load(dllFile.toString());
        }
    }

2、加载dll,dll的当前目录变为jre/bin目录。
例如:dll需要加载一个配置ini文件,而这个dll默认读取和该dll的同级目录下ini文件。但是这时当前目录已经变为jre/bin目录,无论你的dll是否是放在system32下或者是其他的地方
分享到:
评论

相关推荐

    Maven引入本地Jar包并打包进War包中的方法

    为了使用本地Jar包,我们需要将其拷贝至项目根目录,即pom.xml文件所在的同级目录。在项目根目录下,我们可以创建文件夹lib,以便存放本地Jar包。例如,我们可以在项目根目录下创建文件夹lib,然后将四个Jar包...

    Linux系统Tomcat日志分割jar包及配置文件

    1、将log4j-1.2.17.jar、tomcat-juli-adapters.jar两个jar包和log4j.properties文件拷贝到 Tomcat 的 lib 目录下;  2、将 tomcat-juli.jar 拷贝到 Tomcat 的 bin 目录下,替换原有的jar包; 3、将log4j-1.2.17....

    java中生成exe文件 jar打包成可执行文件

    5. **更新jar文件**:使用`jar uvf jar_file_name.jar MANIFEST.MF`命令将MANIFEST.MF文件添加到jar中。 二、使用exe4j生成exe文件 1. **下载并安装exe4j**:exe4j是一个用于将Java应用程序打包为Windows可执行...

    okio jar包下载.zip

    标题"okio jar包下载.zip"表明这是一个包含okio库的Java归档文件(jar包)的压缩文件。Okio是一个针对Java I/O进行优化的库,由Square公司开发,用于提高应用程序在处理输入/输出流时的效率。描述中的"okio jar ...

    hbase-jar包(多版本)拷贝到maven仓库即可

    在实际开发中,我们通常不直接将JAR包拷贝到Maven仓库,而是通过在`pom.xml`文件中添加依赖来管理HBase,例如: ```xml <groupId>org.apache.hbase <artifactId>hbase-client 特定版本号 ``` Maven会自动...

    hbase_libJar包

    其中,`hbase_libJar包`是HBase运行的核心组件之一,包含了HBase运行所需的各种依赖库文件。本文将深入探讨`hbase_libJar包`的组成、作用以及如何在Linux系统中正确配置环境变量`HBASE_HOME`,以确保HBase服务的稳定...

    OKHTTP依赖包jar包下载 OKHTTP和OKIO的JAR包下载

    在"OkHttplibs"这个压缩包中,包含了OKHTTP和OKIO的JAR包,你可以直接将它们添加到你的项目中,以利用这两个库的强大功能。在导入JAR包后,只需按照官方文档或示例代码,就可以轻松开始使用OKHTTP进行网络请求,并...

    Axis2依赖的所有jar包

    在描述中提到,“这些jar包是我在官网上找到axis2的war包,把它部署到tomcat之后,得到axis2工程,在这个工程里面完全拷贝的。”这表明了获取这些jar包的过程。通常,当你从Apache Axis2官方网站下载并部署WAR文件到...

    Jar打包插件,将其拷贝到Eclipse的plugins下面,

    Jar打包插件,将其拷贝到Eclipse的plugins下面,重启Eclipse即可,在文件菜单,导出,Java下其他里看到

    netty-4.1.4-jar包

    这个“netty-4.1.4-jar包”包含了两个重要的文件:“netty-all-4.1.17.Final.jar”和“netty-all-4.1.17.Final-sources.jar”,它们是Netty框架的特定版本——4.1.17.Final的组件。 首先,我们来看“netty-all-...

    通过jar命令生成可执行的jar文件

    安装插件net.sf.fjep.fatjar_0.0.31.jar插件,直接将net.sf.fjep.fatjar_0.0.31.jar拷贝到MyEclipse安装目录下的Plugins目录中,然后重启您的MyEclipse。 2. 执行导出: 1. 选中您要导出为jar文件的项目右

    jar包和测试空项目

    在部署过程中,将jar包和整个项目结构打包成war文件,然后通过管理工具(如manager.xml)上传到tomcat的webapps目录,或者通过脚本直接拷贝到相应位置。启动tomcat后,应用会被自动部署并可供访问。 总结来说,...

    需要的jar包依赖下载

    **Maven** 是一个广泛使用的项目管理和综合工具,它通过在`pom.xml`文件中定义依赖关系来帮助开发者自动下载和管理jar包。在`<dependencies>`标签下,你可以列出所有项目需要的jar包,比如: ```xml <groupId>...

    跨域所需的两个jar包

    标题提到的“跨域所需的两个jar包”就是这个过程中的关键组件。 首先,`cors-filter-1.7.1.jar` 是CORS Filter的实现,它基于Java Servlet规范,用于处理HTTP请求的跨域问题。CORS(Cross-Origin Resource Sharing...

    Netty5.0Jar包和4.03API文档

    这个压缩包包含两个重要的资源:Netty 5.0 的 JAR 包和 Netty 4.0.3 的 API 文档。 首先,让我们详细探讨 Netty 5.0 的 JAR 包。JAR (Java Archive) 文件是 Java 平台的标准归档格式,用于封装多个类文件和其他资源...

    okHttp 3.6.0 依赖包 jar包 内含okio jar包 下载

    为了在项目中使用OkHttp 3.6.0和Okio 1.6.0,你需要将jar包添加到项目的类路径中,或者如果你使用的是现代的构建工具如Maven或Gradle,可以添加相应的依赖配置。在Android Studio中,可以在build.gradle文件中添加...

    HikariCP JAR包及示例代码

    这个JAR包是使用HikariCP的核心依赖,将其添加到项目类路径中,就可以启用HikariCP作为你的数据库连接池。 在HikariCP中,主要关注以下几个核心概念: 1. **连接池**:HikariCP维护了一个数据库连接的池,而不是...

    eclipse查看第三方jar包源码

    1.将net.sf.jadclipse_3.3.0.jar拷贝到eclipse的plugins目录下 2.再删除eclipse的configuration目录下org.eclipse.update文件 3.重启eclipse,点击菜单栏中File->Restart 4.下载jad的可执行文件,解压后放在某一磁盘...

    redis缓存数据库jar包

    在描述中提到的"将jar包拷贝到tomcat的lib下",这表明我们要在基于Tomcat的Java Web应用中使用Redis。Tomcat是Apache软件基金会的一个开源项目,是一个广泛使用的Java应用服务器。当我们开发基于Spring Boot或传统...

    自动拷贝class等文件

    闲来无事,手写了一个打包小工具,java swing实现的 介绍下这个打包工具 把...此版本有有jar包 可以参考源码 针对原型版本去除了过期时间限制 新增了多项目切换功能 新增字段扫描包等 之前版本不能用了 请下载最新的

Global site tag (gtag.js) - Google Analytics