运行不在当前路径下的jar以及获取jar文件路径

jar运行主要有两种方式(其他方式还没发现,反正添加环境变量的方式不行):一是cd到所在路径运行,另一个是在指令中加入jar文件的绝对路径,如:java -jar C:/main.jar

 

当采用第二种方式运行的时候对于一些资源(如图片在C:/,与jar文件同目录)路径的选择就要特别注意了。因为当前路径不是jar文件所在路径,要想获得jar文件所在路径应采用下面的方式:

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
*
* @author 
*/
public class JarUtil {
// jar包名
private String jarName;
// jar包所在绝对路径
private String jarPath;
public JarUtil(Class clazz) {
String path = clazz.getProtectionDomain().getCodeSource().getLocation().getFile();
try {
path = java.net.URLDecoder.decode(path, "UTF-8");
} catch (java.io.UnsupportedEncodingException ex) {
Logger.getLogger(JarUtil.class.getName()).log(Level.SEVERE, null, ex);
}
java.io.File jarFile = new java.io.File(path);
this.jarName = jarFile.getName();
java.io.File parent = jarFile.getParentFile();
if (parent != null) {
this.jarPath = parent.getAbsolutePath();
}
}
/**
* 获取Class类所在Jar包的名称
*
* @return Jar包名 (例如:C:\temp\demo.jar 则返回 demo.jar )
*/
public String getJarName() {
try {
return java.net.URLDecoder.decode(this.jarName, "UTF-8");
} catch (java.io.UnsupportedEncodingException ex) {
Logger.getLogger(JarUtil.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
/**
* 取得Class类所在的Jar包路径
*
* @return 返回一个路径 (例如:C:\temp\demo.jar 则返回 C:\temp )
*/
public String getJarPath() {
try {
return java.net.URLDecoder.decode(this.jarPath, "UTF-8");
} catch (java.io.UnsupportedEncodingException ex) {
Logger.getLogger(JarUtil.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public static void main(String[] args) throws Exception {
JarUtil ju = new JarUtil(JarUtil.class);
JOptionPane.showMessageDialog(null, ju.getJarPath()+"/"+ju.getJarName());
}
}

参考:http://www.cnblogs.com/linj/articles/1824413.html

posted on 2012-06-04 14:49  飞鸿踏雪  阅读(678)  评论(0编辑  收藏  举报

导航