java获得当前路径

1、利用System.getProperty()函数获取当前路径:
Java代码 复制代码

  1. System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径  

System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径

2、使用File提供的函数获取当前路径:
Java代码 复制代码

  1. File directory = new File("");//设定为当前文件夹   
  2. try{   
  3.      System.out.println(directory.getCanonicalPath());//获取标准的路径   
  4.      System.out.println(directory.getAbsolutePath());//获取绝对路径   
  5. }catch(Exceptin e){}  

File directory = new File("");//设定为当前文件夹try{ System.out.println(directory.getCanonicalPath());//获取标准的路径 System.out.println(directory.getAbsolutePath());//获取绝对路径}catch(Exceptin e){}

File.getCanonicalPath()和File.getAbsolutePath()大约只是对于new File(".")和new File("..")两种路径有所区别。

# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹
# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径
# 至于getPath()函数,得到的只是你在new File()时设定的路径

比如当前的路径为 C: est :
Java代码 复制代码

  1. File directory = new File("abc");   
  2. directory.getCanonicalPath(); //得到的是C: estabc   
  3. directory.getAbsolutePath();    //得到的是C: estabc   
  4. direcotry.getPath();                    //得到的是abc  

File directory = new File("abc");directory.getCanonicalPath(); //得到的是C: estabcdirectory.getAbsolutePath(); //得到的是C: estabcdirecotry.getPath(); //得到的是abc
Java代码 复制代码

  1. File directory = new File(".");   
  2. directory.getCanonicalPath(); //得到的是C: est   
  3. directory.getAbsolutePath();    //得到的是C: est.   
  4. direcotry.getPath();                    //得到的是.  

File directory = new File(".");directory.getCanonicalPath(); //得到的是C: estdirectory.getAbsolutePath(); //得到的是C: est.direcotry.getPath(); //得到的是.
Java代码 复制代码

  1. File directory = new File("..");   
  2. directory.getCanonicalPath(); //得到的是C:   
  3. directory.getAbsolutePath();    //得到的是C: est..   
  4. direcotry.getPath();                    //得到的是..  

File directory = new File("..");directory.getCanonicalPath(); //得到的是C:directory.getAbsolutePath(); //得到的是C: est..direcotry.getPath(); //得到的是..

另外:System.getProperty()中的字符串参数如下:

Java代码 复制代码

  1. System.getProperty()参数大全   
  2. # java.version                                 Java Runtime Environment version   
  3. # java.vendor                                 Java Runtime Environment vendor   
  4. # java.vendor.url                            Java vendor URL   
  5. # java.home                                 Java installation directory   
  6. # java.vm.specification.version    Java Virtual Machine specification version   
  7. # java.vm.specification.vendor     Java Virtual Machine specification vendor   
  8. # java.vm.specification.name       Java Virtual Machine specification name   
  9. # java.vm.version                         Java Virtual Machine implementation version   
  10. # java.vm.vendor                         Java Virtual Machine implementation vendor   
  11. # java.vm.name                         Java Virtual Machine implementation name   
  12. # java.specification.version         Java Runtime Environment specification version   
  13. # java.specification.vendor          Java Runtime Environment specification vendor   
  14. # java.specification.name            Java Runtime Environment specification name   
  15. # java.class.version                     Java class format version number   
  16. # java.class.path                       Java class path   
  17. # java.library.path                  List of paths to search when loading libraries   
  18. # java.io.tmpdir                        Default temp file path   
  19. # java.compiler                        Name of JIT compiler to use   
  20. # java.ext.dirs                        Path of extension directory or directories   
  21. # os.name                               Operating system name   
  22. # os.arch                                   Operating system architecture   
  23. # os.version                        Operating system version   
  24. # file.separator                          File separator ("/" on UNIX)   
  25. # path.separator                   Path separator (":" on UNIX)   
  26. # line.separator                        Line separator ("
    " on UNIX)   
  27. # user.name                         User’s account name   
  28. # user.home                               User’s home directory   
  29. # user.dir                                User’s current working directory   

得到classpath和当前类的绝对路径的一些方法

获得CLASSPATH之外路径的方法:

URL base = this.getClass().getResource(""); //先获得本类的所在位置,如/home/popeye/testjava/build/classes/net/ String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath(); //就可以得到/home/popeye/testjava/name

下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。

1.FileTest.class.getResource("")

得到的是当前类FileTest.class文件的URI目录。不包括自己!

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/

2.FileTest.class.getResource("/")

得到的是当前的classpath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

3.Thread.currentThread().getContextClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

4.FileTest.class.getClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

5.ClassLoader.getSystemResource("")

得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。

在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。

注意点:

1.尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。这是一颗定时炸弹,随时可能要你的命。

2.尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。

3.尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。

4.绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。

使用硬编码的绝对路径是完全没有必要的!它一定会让你死的很难看!程序将无法移植!

如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!

当然,我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径.

发表评论

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

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>