方法(一)、通过某个对象的getClass()方法取得Class,其中包含了类的许多信息。在其中找取得URL之类的方法,以便取得URL,然后调用URL的getpath()方法,取得字符串并稍作处理就得到该类的Class文件的绝对路径,在此基础上就可以方便的使用相对路径。Object.getClass().getResource("/").getPath(); 方法(二) 通过类加载器获取路径信息public abstract class ClassLoader extends Object类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。 (1) 利用Thread类中的类加载器Thread.currentThread().getContextClassLoader()(2) 利用Class类获取类加载器ClassName.class(或者 对象.getClass()).getClassLoader()API中ClassLoader的相关方法1、public URL getResource(String name)查找具有给定名称的资源。资源是可以通过类代码以与代码基无关的方式访问的一些数据(图像、声音、文本等)。资源名称是以 '/' 分隔的标识资源的路径名称。 此方法首先搜索资源的父类加载器;如果父类加载器为 null,则搜索的路径就是虚拟机的内置类加载器的路径。如果搜索失败,则此方法将调用 findResource(String) 来查找资源。 2、public static URL getSystemResource(String name)从用来加载类的搜索路径中查找具有指定名称的资源。此方法通过系统类加载器来查找资源。 方法(三)利用文件来获取路径 File ff=new File("");API中File类相关的方法:java.io.File 文件和目录路径名的抽象表示形式。1、public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串2、public String getCanonicalPath() throws IOException 返回此抽象路径名的规范路径名字符串。 3、public String getPath() 将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称。4、public boolean isAbsolute()测试此抽象路径名是否为绝对路径名。绝对路径名的定义与系统有关。在 UNIX 系统上,如果路径名的前缀是 "/",那么该路径名是绝对路径名。在 Microsoft Windows 系统上,如果路径名的前缀是后跟 "\\" 的盘符,或者是 "\\\\",那么该路径名是绝对路径名。 方法(四)利用System类提供信息java.lang.System 包 public final class System extends Object 类 System 类包含一些有用的类字段和方法。它不能被实例化。在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。方法:public static String getProperty(String key) 获取指定键指示的系统属性。首先,如果有安全管理器,则用该键作为其参数来调用 checkPropertyAccess 方法。结果可能导致 SecurityException。 如果没有当前系统属性的集合,则首先用与 getProperties 方法相同的方式创建并初始化系统属性的集合。 参数: key - 系统属性的名称。返回: 系统属性的字符串值,如果没有带有此键的属性,则返回 null。 获取当前工作目录为:System.getProperty("user.dir") // 方法一,利用Class的getResource方法类获取信息(实际上该方法委托ClassLoader类实现) url= absp.getClass().getResource("/AbsPath.class"); path = url.getPath(); System.out.println("方法一:\nURL is : " + url); System.out.println("get Path is : " + path); System.out.println("Real Path is : " + path.substring(1)+"\n"); // 方法二,利用ClassLoader类获取信息 ClassLoader loader=Thread.currentThread().getContextClassLoader(); //或者 //loader = AbsPath.class.getClassLoader(); url=loader.getResource(""); path=url.getPath(); System.out.println("方法二:\nURL is : " + url); System.out.println("get Path is : " + path); System.out.println("Real Path is : " + path.substring(1)); System.out.println(ClassLoader.getSystemResource("")+"\n"); // 方法三,利用文件来处理 File ff=new File(""); System.out.println("方法三:\n"+ff.getAbsolutePath()); System.out.println(ff.getCanonicalPath()); System.out.println(ff.isAbsolute()+ff.getPath()+"\n"); //方法四,利用System类相关信息 System.out.println("方法四:\n"+System.getProperty("user.home"));//用户主目录 System.out.println(System.getProperty("user.dir"));//用户的当前工作目录 System.out.println(System.getProperty("java.class.path"));//Java类路径 System.out.println(System.getProperty("os.name"));//操作系统名称 System.out.println(System.getProperty("os.version"));//操作系统版本 方法一:URL is : file:/D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.classget Path is : /D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.classReal Path is : D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.class 方法二:URL is : file:/D:/Java/EclipseWorkSpace/MyJavaDocs/get Path is : /D:/Java/EclipseWorkSpace/MyJavaDocs/Real Path is : D:/Java/EclipseWorkSpace/MyJavaDocs/file:/D:/Java/EclipseWorkSpace/MyJavaDocs/ 方法三:D:\Java\EclipseWorkSpace\MyJavaDocsD:\Java\EclipseWorkSpace\MyJavaDocsfalse 方法四:d:\我的文档D:\Java\EclipseWorkSpace\MyJavaDocsD:\Java\EclipseWorkSpace\MyJavaDocsWindows XP5.1