在做有关jna的项目开发时,我们经常碰到的问题就是如何去加载我们所写的dll文件。一般来说,这个dll会被放到windows/system32目录下,但这个方法需要手动地将这个dll复制到相应的目录中。但如果这个操作要由用户来做的话,过程就复杂了,不能期望用户总是能按指定的步骤去进行。所以,我们需要一个更方便的方法,比如直接将dll放到与jar相同的目录中,直接放到一起,避免了再重新复制dll的步骤。
使用这个方法,我们就可以使用以下方法来加载这个dll。
System.load(filePath);
这个filePath就是dll的文件路径了。那么问题就剩下如何来找到这个dll了。再简单一点,我们只需要找到这个相绑定的jar的目录就可以了。那么问题就简单了,使用以下方法就可以做到了(这个方法引自JRegistry,一个访问windows注册表的jar工具):
String resourceName = X.class.getSimpleName() + ".class";//这里的X就是与dll相绑定的jar中任意一个类 URL url = X.class.getResource(resourceName);//取得这个class文件的URL String urlStr = url.toString();//返回格式为jar:file:/x:/x/xx/xx.jar!/xx/xx/X.class,要求class是存放在jar文件中,如果是文件目录中,则是file:/x:/xx/x.jar!/xx/xx/X.class的格式 int start = "jar:file:/".length(); int end = urlStr.indexOf("!/"); String fileName = urlStr.substring(start, end);将jar:file:/和后面的!/截取掉,就只剩下x:/x/xx/x.jar,就是jar文件的路径名 File file = new File(fileName); System.out.println(file.getParentFile().getCanonicalPath());//直接返回jar文件所在的目录,这个目录就是我们所需要找的目录
转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201208080001.html