Java 加载 DLL 类库

Jdk加载DLL类库

手动jdk/bin下放置DLL类库

如下:

cd  C:\Program Files\fills-tools\Java\jdk1.8.0_202\bin 或者 D:\Program Files\Java\jdk1.8.0_202\bin

放置 DLL类库

jdk会自动加载dll

Java代码jdk/bin下放置DLL类库

/**

       *获取Java jdk路径

       *@returnSet<String>

       */

      public staticSet<String> getJavaPath(){

           //获取java类库路径

           String[]p= System.getProperty("java.library.path").split(";");

           //获取java-jdk版本

           StringjavaVer= System.getProperty("java.version");

           Set<String>ps=newHashSet<String>();

           for(Stringv:p){

                 if(v.endsWith("\\Java\\jdk"+javaVer+"\\bin") ||v.endsWith("/Java/jdk"+javaVer+"/bin")){

                      ps.add(v);

                 }

           }

           return ps;

      }

/**

     *

     *@Function: FileUtil.java

     *@Description:查找文件并保存本地

     *

     *@param: localPath

     *@param: searchFile

     *@return:void

     *

     */

    public static voidsearchAndSaveLocal(StringlocalPath,StringsearchFile){

      if(!createFile(localPath)){

           return;

      }

      StringsearchPath=getCurrentOsPath(searchFile);

      if(searchPath!=null){

           InputStreamin= getFileInputStream(searchFile);

           if(in!=null){

                 try{

                      writeToLocal(localPath,in);

                 }catch(Exceptione) {

                 }

                 try{

                      in.close();

                 }catch(Exceptione2) {

                 }

           }

      }

    }

public static voidmain(String[]args) {

           Stringjacob="jacob-1.18-x64.dll";

           for(Stringjdkpath:JavaClassPath.getJavaPath()){

              System.out.println(jdkpath);

              FileUtil.searchAndSaveLocal(jdkpath+"/"+jacob,jacob);

          }

      }

DLL类库

注意: C盘权限问题

D盘放置情况

Java 代码加载DLL类库

/**

       *加载dlL 作为系统path

       *@paramdllPath

       *@paramdll

       */

      public static voidaddDirPath(StringdllPath,Stringdll){

        try{

           //获取系统path

           Fieldfield= ClassLoader.class.getDeclaredField("sys_paths");

           //允许更改配置

           field.setAccessible(true);

           //获取系统配置

           String[]path= (String[])field.get(null);

           String[]temp=newString[path.length+1];

           System.arraycopy(path, 0,temp, 0,path.length);

           //指定加载配置文件

           temp[path.length] =dllPath;

           field.set(null,temp);

           //从新加载path下的ddl

           System.load(dllPath+dll);

         }catch(Exceptione){

        }

  }

   //保存文件路径,并作为系统path

    private staticStringfilePath="D:/fills-data/voice/";

    public static voidmain(String[]args) {

           //第二种方案将jacob-1.18-x64.dll所在目录加载到sys_path里,重新System.load(dll)

           Stringjacob="jacob-1.18-x64.dll";

           FileUtil.searchAndSaveLocal(filePath+jacob,jacob); //另存到指定地方

           JavaClassPath.addDirPath(filePath,jacob);

    }

注:系统应用加载新的path路径作为类库


版权声明:本文为u014614478原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。