java 获取当前路径

本文介绍了在Java中获取当前路径的不同方法及其应用场景,包括使用System.getProperty()、File类的方法及Web项目中的路径获取方式。

公司项目中,获取当前路径的方法是这样的:

C

//当前的类名就是:GetFilePath public static String getFilePath(String fileName) { String path = GetFilePath.class.getResource("").toString(); if (path != null) { path = path.substring(5, path.indexOf("WEB-INF") + 8);//如果是windwos将5变成6 //System.out.println("current path :" + path); } return (path + fileName); }

个人感觉不是很好,部署到windows和linux下的时候还得重新设置路径。

于是使用了以下1号方法,但是奇怪的是1号方法在linux下路径不对

后来得知公司使用的方法得到的相对路径,而1号方法是得到绝对路径

没有更加详细的测试,以后继续研究。。。

以下是我从网上找的获取路径的方法:

1、利用System.getProperty()函数获取当前路径:

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

2、使用File提供的函数获取当前路径:

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

3.java web 项目中

jsp中:

request.getContextPath() request.getSession().getServletContext().getRealPath()

servlet中:

this.getServletContext().getRealPath("/"); this.getServlet().getServletContext().getRealPath("/");

其他说明:

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

# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹

# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径

# 至于getPath()函数,得到的只是你在new File()时设定的路径

比如当前的路径为 C:\test :

File directory = new File("abc");

directory.getCanonicalPath(); //得到的是C:\test\abc

directory.getAbsolutePath(); //得到的是C:\test\abc

direcotry.getPath(); //得到的是abc

File directory = new File(".");

directory.getCanonicalPath(); //得到的是C:\test

directory.getAbsolutePath(); //得到的是C:\test\.

direcotry.getPath(); //得到的是.

File directory = new File("..");

directory.getCanonicalPath(); //得到的是C:\

directory.getAbsolutePath(); //得到的是C:\test\..

direcotry.getPath(); //得到的是..

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

System.getProperty()参数大全

# java.version Java Runtime Environment version

# java.vendor Java Runtime Environment vendor

# java.vendor.url Java vendor URL

# java.home Java installation directory

# java.vm.specification.version Java Virtual Machine specification version

# java.vm.specification.vendor Java Virtual Machine specification vendor

# java.vm.specification.name Java Virtual Machine specification name

# java.vm.version Java Virtual Machine implementation version

# java.vm.vendor Java Virtual Machine implementation vendor

# java.vm.name Java Virtual Machine implementation name

# java.specification.version Java Runtime Environment specification version

# java.specification.vendor Java Runtime Environment specification vendor

# java.specification.name Java Runtime Environment specification name

# java.class.version Java class format version number

# java.class.path Java class path

# java.library.path List of paths to search when loading libraries

# java.io.tmpdir Default temp file path

# java.compiler Name of JIT compiler to use

# java.ext.dirs Path of extension directory or directories

# os.name Operating system name

# os.arch Operating system architecture

# os.version Operating system version

# file.separator File separator ("/" on UNIX)

# path.separator Path separator (":" on UNIX)

# line.separator Line separator ("\n" on UNIX)

# user.name User's account name

# user.home User's home directory

# user.dir User's current working directory

Java中,获取当前路径可根据不同场景采用不同方法: ### 普通Java类场景 - `Test.class.getResource("")`:获取当前类文件的URI目录,不包含类文件本身。示例: ```java System.out.println(Test.class.getResource("")); ``` - `Test.class.getResource("/")`:获取当前的classpath的绝对URI路径。示例: ```java System.out.println(Test.class.getResource("/")); ``` - `Thread.currentThread().getContextClassLoader().getResource("")`:获取当前ClassPath的绝对URI路径。示例: ```java System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); ``` - `Test.class.getClassLoader().getResource("")`:获取当前ClassPath的绝对URI路径。示例: ```java System.out.println(Test.class.getClassLoader().getResource("")); ``` - `ClassLoader.getSystemResource("")`:获取当前ClassPath的绝对URI路径。示例: ```java System.out.println(ClassLoader.getSystemResource("")); ``` - `new File("").getAbsolutePath()`:获取当前路径。示例: ```java System.out.println(new File("").getAbsolutePath()); ``` - `Class.class.getClass().getResource("/").getPath()`:获取类的绝对路径。示例: ```java System.out.println(Class.class.getClass().getResource("/").getPath()); ``` - `System.getProperty("user.dir")`:获取工程的路径。示例: ```java System.out.println(System.getProperty("user.dir")); ``` ### Web服务器场景 #### Tomcat 在类中使用`System.getProperty("user.dir")`,显示的是`%Tomcat_Home%/bin`。示例: ```java System.out.println(System.getProperty("user.dir")); ``` #### Resin 不是JSP放置的相对路径,而是JSP引擎执行这个JSP编译成SERVLET的路径为根。 #### 通用Web场景 - `ServletContext.getResourceAsStream()`:用于读取文件。示例(假设在Servlet中): ```java InputStream inputStream = getServletContext().getResourceAsStream("path/to/file"); ``` - `ServletContext.getRealPath("mypath/filename")`:获取文件真实路径。示例(假设在Servlet中): ```java String fileRealPath = getServletContext().getRealPath("mypath/filename"); ``` - `new java.io.File(application.getRealPath(request.getRequestURI())).getParent()`:得到页面所在服务器的绝对路径。示例(假设在JSP中): ```java String absPath = new java.io.File(application.getRealPath(request.getRequestURI())).getParent(); ``` ### JSP场景 - `request.getRequestURI()`:得到包含工程名的当前页面全路径。示例(假设在JSP中): ```jsp <%= request.getRequestURI() %> ``` - `request.getContextPath()`:得到工程名。示例(假设在JSP中): ```jsp <%= request.getContextPath() %> ``` - `request.getServletPath()`:得到当前页面所在目录下全名称。示例(假设在JSP中): ```jsp <%= request.getServletPath() %> ``` - `application.getRealPath("页面.jsp")`:得到页面所在服务器的全路径。示例(假设在JSP中): ```jsp <%= application.getRealPath("test.jsp") %> ``` ### 其他方法 - 使用`Paths`类处理路径: ```java import java.nio.file.Paths; String path = Paths.get("dir", "file.txt").toString(); System.out.println(path); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值