JAVA获取文件绝对路径的方法
程序员文章站
2024-03-31 17:23:04
本文实例讲述了java获取文件绝对路径的方法。分享给大家供大家参考。具体实现方法如下:
复制代码 代码如下:/**
* 获取一个类的class文件所在的绝对路径。 这个...
本文实例讲述了java获取文件绝对路径的方法。分享给大家供大家参考。具体实现方法如下:
复制代码 代码如下:
/**
* 获取一个类的class文件所在的绝对路径。 这个类可以是jdk自身的类,也可以是用户自定义的类,或者是第三方开发包里的类。
* 只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径。
*
* @param cls
* 一个对象的class属性
* @return 这个类的class文件位置的绝对路径。 如果没有这个类的定义,则返回null。
*/
private string getpathfromclass(class cls) throws ioexception {
string path = null;
if (cls == null) {
throw new nullpointerexception();
}
url url = getclasslocationurl(cls);
if (url != null) {
path = url.getpath();
if ("jar".equalsignorecase(url.getprotocol())) {
try {
path = new url(path).getpath();
}
catch (malformedurlexception e) {
}
int location = path.indexof("!/");
if (location != -1) {
path = path.substring(0, location);
}
}
file file = new file(path.replaceall("%20"," "));
path = file.getcanonicalpath();
}
return path;
}
/**
* 获取类的class文件位置的url。这个方法是本类最基础的方法,供其它方法调用。
*/
private url getclasslocationurl(final class cls) {
if (cls == null) {
throw new illegalargumentexception("class that input is null");
}
url result = null;
final string clsasresource = cls.getname().replace('.', '/').concat(".class");
final protectiondomain pd = cls.getprotectiondomain();
if (pd != null) {
final codesource cs = pd.getcodesource();
if (cs != null) {
result = cs.getlocation();
}
if (result != null) {
if ("file".equals(result.getprotocol())) {
try {
if (result.toexternalform().endswith(".jar")|| result.toexternalform().endswith(".zip")) {
result = new url("jar:".concat(result.toexternalform()).concat("!/").concat(clsasresource));
}
else if (new file(result.getfile()).isdirectory()) {
result = new url(result, clsasresource);
}
}
catch (malformedurlexception ignore) {
}
}
}
}
if (result == null) {
final classloader clsloader = cls.getclassloader();
result = clsloader != null ? clsloader.getresource(clsasresource): classloader.getsystemresource(clsasresource);
}
return result;
}
* 获取一个类的class文件所在的绝对路径。 这个类可以是jdk自身的类,也可以是用户自定义的类,或者是第三方开发包里的类。
* 只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径。
*
* @param cls
* 一个对象的class属性
* @return 这个类的class文件位置的绝对路径。 如果没有这个类的定义,则返回null。
*/
private string getpathfromclass(class cls) throws ioexception {
string path = null;
if (cls == null) {
throw new nullpointerexception();
}
url url = getclasslocationurl(cls);
if (url != null) {
path = url.getpath();
if ("jar".equalsignorecase(url.getprotocol())) {
try {
path = new url(path).getpath();
}
catch (malformedurlexception e) {
}
int location = path.indexof("!/");
if (location != -1) {
path = path.substring(0, location);
}
}
file file = new file(path.replaceall("%20"," "));
path = file.getcanonicalpath();
}
return path;
}
/**
* 获取类的class文件位置的url。这个方法是本类最基础的方法,供其它方法调用。
*/
private url getclasslocationurl(final class cls) {
if (cls == null) {
throw new illegalargumentexception("class that input is null");
}
url result = null;
final string clsasresource = cls.getname().replace('.', '/').concat(".class");
final protectiondomain pd = cls.getprotectiondomain();
if (pd != null) {
final codesource cs = pd.getcodesource();
if (cs != null) {
result = cs.getlocation();
}
if (result != null) {
if ("file".equals(result.getprotocol())) {
try {
if (result.toexternalform().endswith(".jar")|| result.toexternalform().endswith(".zip")) {
result = new url("jar:".concat(result.toexternalform()).concat("!/").concat(clsasresource));
}
else if (new file(result.getfile()).isdirectory()) {
result = new url(result, clsasresource);
}
}
catch (malformedurlexception ignore) {
}
}
}
}
if (result == null) {
final classloader clsloader = cls.getclassloader();
result = clsloader != null ? clsloader.getresource(clsasresource): classloader.getsystemresource(clsasresource);
}
return result;
}
希望本文所述对大家的java程序设计有所帮助。
下一篇: 详解Java实现缓存(LRU,FIFO)