Java索引总结(六.路径的获取一——四种获取方式)

Java目录总结(六.路径的获取一——四种获取方式)

方法(一)、通过某个对象的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.class

get Path is : /D:/Java/EclipseWorkSpace/MyJavaDocs/AbsPath.class

Real 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\MyJavaDocs

D:\Java\EclipseWorkSpace\MyJavaDocs

false

 

方法四:

d:\我的文档

D:\Java\EclipseWorkSpace\MyJavaDocs

D:\Java\EclipseWorkSpace\MyJavaDocs