深证通接口调试配置

该博客内容涉及Java程序中动态加载不同操作系统下的本地库文件(.dll或.so),并详细描述了如何根据系统类型(Windows或Linux)下载、拷贝配置文件到临时目录,并确保库文件的正确加载。主要操作包括检查系统类型、创建目录、拷贝文件以及调用System.load加载库文件。
摘要由CSDN通过智能技术生成

1、发送报文(我这里用的是mr2)

MrUtil.mr2Send(mrMsg);

2、下载发送的配置类

https://biz.sscc.com/

首页——滑动到最下方资料下载——程序下载——下载对应系统的版本

3、整合到自己的项目里(因为要发布到服务器,所以windows和linux都需要)

 4、在marpi中加入判断方法

static
    {
        String libName = "mrapi";
        String systemType = System.getProperty("os.name");
        boolean is64bit = false;
        if (systemType.toLowerCase().indexOf("win") != -1) {
            is64bit = System.getenv("ProgramFiles(x86)") != null;
        } else {
            is64bit = System.getProperty("os.arch").indexOf("64") != -1;
        }

        String libExtension = systemType.toLowerCase().indexOf("win") != -1 ? ".dll" : ".so";
        //mrapi.dll 或 mrapi.so
        String libFullName = libName + libExtension;
        //temp地址
        String nativeTempDir = System.getProperty("java.io.tmpdir");
        log.info("systemType:" + systemType + "\tis64bit:" + is64bit + "\tlibExtension:" + libExtension + "\tlibFullName:" + libFullName + "\tnativeTempDir:" + nativeTempDir + "\tlibraryDir:");
        InputStream in = null;
        BufferedInputStream reader = null;
        BufferedInputStream iniReader = null;
        FileOutputStream writer = null;
        FileOutputStream iniWriter = null;
        String[] fileType = new String[8];
        String resource = is64bit ? "/mrapi/" : "/mrapi/";
        String iniResource = "ini"+File.separator;
        if (systemType.toLowerCase().indexOf("win") != -1) {
            fileType = new String[]{"mr2api.h", "mr3api.h", "mrapi.dll", "mrapi.h", "mrapi.lib"};
        } else if (systemType.toLowerCase().indexOf("linux") != -1) {
            fileType = new String[]{"mr3api.h", "mrapi.h", "mr2api.h", "libmrapi.so", "readme.txt"};
            resource = is64bit ? "/mrapiLinux/" : "/mrapiLinux/";
            libFullName = "libmrapi" + libExtension;
        } else {
            fileType = new String[]{"mr2api.h", "mrapi_log.conf", "libmrapi.so", "mrapi.h", "libinfo.txt", "history.txt"};
            resource = is64bit ? "/hp64/" : "/hp32/";
            libFullName = "libmrapi" + libExtension;
        }
        //新地址 C:\Users\坤坤\AppData\Local\Temp\mrapi
        String extractedLibPath = nativeTempDir + resource;
        String iniLibPath = nativeTempDir + resource + iniResource;
        File libDir = new File(extractedLibPath);
        File libDir2 = new File(iniLibPath);
        if (!libDir.exists()) {
            log.info("开始创建动态链接库存放的临时目录:" + extractedLibPath);
            if (systemType.toLowerCase().indexOf("win") == -1) {
                libDir.setWritable(true, false);
            }

            libDir.mkdirs();
        }
        if (!libDir2.exists()) {
            log.info("开始创建动态链接库存放的临时目录:" + iniLibPath);
            if (systemType.toLowerCase().indexOf("win") == -1) {
                libDir2.setWritable(true, false);
            }

            libDir2.mkdirs();
        }

        log.info("resource:" + resource + "\tlibDir:" + extractedLibPath + "\tlibFullName:" + libFullName);
        File extractedLibFile = new File(nativeTempDir + resource + File.separator + libFullName);
        log.info(extractedLibFile.getPath());

        File file;
        String[] var15;
        int var16;
        int var17;
        String fname;
        if (!extractedLibFile.exists()) {
            log.info("目标文件[" + extractedLibFile.getPath() + "]不存在开始拷贝文件...:");

            try {
                log.info(".....开始拷贝文件[ mrapi.ini ]到[" + nativeTempDir + iniResource + File.separator + "mrapi.ini]");
                InputStream inputStream = mrapi.class.getResourceAsStream(resource + iniResource + "mrapi.ini");
                log.info("获取文件路径为"+resource + iniResource + "mrapi.ini");
                if (inputStream == null) {
                    log.info(".....拷贝文件[ mrapi.ini ]获取文件流为空....");
                } else {
                    iniReader = new BufferedInputStream(inputStream);
                    File iniFile = new File(nativeTempDir + File.separator + resource  + File.separator + iniResource  + "mrapi.ini");
                    iniWriter = new FileOutputStream(iniFile);
                    for(byte[] buffer = new byte[1024]; iniReader.read(buffer) > 0; buffer = new byte[1024]) {
                        iniWriter.write(buffer);
                    }
                    if (inputStream != null) {
                        inputStream.close();
                    }

                    if (iniWriter != null) {
                        iniWriter.close();
                    }

                    log.info(".....拷贝文件[" + iniFile.getPath() + "]成功....");
                }

                var15 = fileType;
                var16 = fileType.length;

                for(var17 = 0; var17 < var16; ++var17) {
                    fname = var15[var17];
                    log.info(".....开始拷贝文件[" + fname + "]到[" + nativeTempDir + File.separator + fname + "]");
                    in = mrapi.class.getResourceAsStream(resource + fname);
                    if (in == null) {
                        log.info(".....拷贝文件[" + fname + "]获取文件流为空....");
                    } else {
                        reader = new BufferedInputStream(in);
                        file = new File(nativeTempDir + File.separator + resource + File.separator + fname);
                        writer = new FileOutputStream(file);

                        for(byte[] buffer = new byte[1024]; reader.read(buffer) > 0; buffer = new byte[1024]) {
                            writer.write(buffer);
                        }

                        if (in != null) {
                            in.close();
                        }

                        if (writer != null) {
                            writer.close();
                        }

                        log.info(".....拷贝文件[" + file.getPath() + "]成功....");
                    }
                }
            } catch (IOException var23) {
                log.info(".....拷贝文件过程出现错误,错误信息为:" + var23.getMessage());
                var23.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                if (writer != null) {
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        } else {
            log.info("获取到路径文件:" + extractedLibFile.getPath() + "\t文件大小:" + extractedLibFile.length());
            var15 = fileType;
            var16 = fileType.length;

            for(var17 = 0; var17 < var16; ++var17) {
                fname = var15[var17];
                file = new File(nativeTempDir + File.separator + resource + File.separator + fname);
                if (file.exists()) {
                    log.info("获取到路径文件:" + file.getPath() + "\t文件大小:" + file.length());
                }
            }
        }

        log.info("System.load:" + extractedLibFile.getPath());
        System.load(extractedLibFile.getPath());



    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值