读取指定jar所在的系统目录(windows系统中)

在做有关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

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

邮箱地址不会被公开。 必填项已用*标注