1 获取相对路径

/**
* 获取相对路径 【推荐】
* 使用Java提供的Path类和Paths类来获取相对路径。
* 例如,假设有两个路径a和b,我们可以使用Path类的relativize()方法来获取相对路径,该方法返回一个相对路径的Path对象。
*/
@Test
public void getRelativePathTest1(){
Path pathA = Paths.get("/user/myproject/dir1");//不需要保证文件实际存在
Path pathB = Paths.get("/user/myproject/dir2/subdir/file.txt");//不需要保证文件实际存在 Path relativePathB = pathA.relativize(pathB);//[√]
log.info("relativePathB : {}", relativePathB);// "relativePathB : ..\dir2\subdir\file.txt" Path relativePathA = pathB.relativize(pathA);
log.info("relativePathA : {}", relativePathA);// "relativePathA : ..\..\..\dir1"
} /**
* 获取相对路径 【推荐】
*/
@Test
public void getRelativePathTest2() throws IOException {
File fileA = new File("/user/myproject/dir1");//不需要保证文件实际存在
File fileB = new File("/user/myproject/dir2/subdir/file.txt");//不需要保证文件实际存在 String absolutePathA = fileA.getCanonicalPath();//E:\\user\\myproject\\dir1
String absolutePathB = fileB.getCanonicalPath();//E:\\user\\myproject\\dir2\\subdir\\file.txt
String relativePath = absolutePathB.substring(absolutePathA.length()); // 输出:/dir2/subdir/file.txt log.info("absolutePathA : {}, absolutePathB : {}", absolutePathA, absolutePathB);//absolutePathA : E:\\user\\myproject\\dir1, absolutePathB : E:\\user\\myproject\\dir2\\subdir\\file.txt
log.info("relativePath : {}", relativePath);//relativePath : \\subdir\\file.txt
} /**
* 获取相对路径
* 如果是在Web应用中获取相对路径,可以使用ServletContext的getRealPath()方法来获取文件的绝对路径,然后使用字符串的截取来获取相对路径。
*/
// @Test
// public void getRelativePathTest3(){
// ServletContext servletContext = null;
// String absolutePathA = servletContext.getRealPath("/dir1");
// String absolutePathB = servletContext.getRealPath("/dir2/subdir/file.txt");
// String relativePath = absolutePathB.substring(absolutePathA.length()); // 输出:/dir2/subdir/file.txt
// }

2 获得绝对路径

基于相对路径获得绝对路径

@Test
public void getAbsolutePathByRelativePathTest(){
// 相对路径
String relativePath = "example.txt"; // 获取绝对路径
String absolutePath = null;
//方式1
//absolutePath = ( new File(relativePath) ).getAbsolutePath( );//E:\source_code\ADP\poc-bigdata\poc-common-demo\example.txt //方式2
//absolutePath = ( (Path) Paths.get(relativePath)).toAbsolutePath().toString();//E:\source_code\ADP\poc-bigdata\poc-common-demo\example.txt /**
* 方式3 【推荐】
* ClassLoader 提供的 getResource()方法可以获取资源文件的URL。通过 URL 对象的 getPath 方法可以获取文件的绝对路径
*/
//absolutePath = getAbsolutePath(ClassLoader.getSystemClassLoader(), relativePath); //方式4 【推荐】 基于基础参考路径、相对路径,拼接出文件的绝对路径
String classpath = ClassLoader.getSystemResource("").getPath();//如: /E:/source_code/xxx/xxx-bigdata/xxx-common-demo/target/classes/
absolutePath = getAbsolutePath( classpath, relativePath ); //方式5 通过 javax.servlet.ServletContext#getRealPath(relativePath) 方法
//ServletContext servletContext = null;//获取 servletContext 对象,此处省略获取过程
//absolutePath = servletContext.getRealPath(relativePath); // 输出绝对路径
System.out.println("absolutePath: " + absolutePath);
} /**
* 通过 classloader 、相对路径,获得绝对路径
* @param relativePath
* @param classLoader
* [1] 获取ClassLoader的方式
* ClassLoader classLoader = ClassLoader.getSystemClassLoader();
* ClassLoader classLoader = Thread.currentThread().getContextClassLoader() * ClassLoader classLoader = XXClass.class.getClassLoader(); * @return */public String getAbsolutePath(ClassLoader classLoader, String relativePath){
String absolutePath = null; URL resource = classLoader.getResource(relativePath);// ClassLoader.getSystemResource(relativePath); if(resource != null){
absolutePath = resource.getPath();
} else{
log.warn("the relative path's resource not for classpath!relativePath:{}", relativePath);
}
return absolutePath;
} /**
* 通过 基础参考路径 、相对路径,获得绝对路径
* @param relativePath 注:路径的首个字符不得含有文件夹符号
* @param basePath 注: 路径的最后必须含文件夹符号 [ "/"(Linux) , "\"(Windows) ]
* @return */public String getAbsolutePath(String basePath, String relativePath) {
//File.separator
return basePath + relativePath;
}

3 获取 classpath 路径

public class ClassPathDemo {
public static void main(String[] args) {
String classpath = null; //方式1
classpath = System.getProperty("java.class.path");//classpath:D:\Program\Java\jdk1.8.0_261\jre\lib\charsets.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\deploy.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\access-bridge-64.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\cldrdata.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\dnsns.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\jaccess.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\jfxrt.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\localedata.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\nashorn.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\sunec.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\sunjce_provider.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\sunmscapi.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\sunpkcs11.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\ext\zipfs.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\javaws.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\jce.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\jfr.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\jfxswt.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\jsse.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\management-agent.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\plugin.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\resources.jar;D:\Program\Java\jdk1.8.0_261\jre\lib\rt.jar;E:\source_code\xxx\xxx-bigdata\xxx-common-demo\target\classes;D:\Program\IDEA\IDEA_COMMUNITY_2023.2\lib\idea_rt.jar //方式2
//String classpath = ClassPathDemo.class.getResource("/").getPath();//out : 同方式1 //方式3 【推荐】
//classpath = ClassLoader.getSystemResource("").getPath();//classpath:/E:/source_code/xxx/xxx-bigdata/xxx-common-demo/target/classes/ //方式4 | 仅适用于 servlet web 项目
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
//classpath = context.getResource("").getFile().getAbsolutePath();
System.out.println("classpath:" + classpath);
}
}

4 获取当前工程根路径

  • 在Java程序中,可以通过System.getProperty("user.dir")来获取当前工作目录的路径,即程序运行时所在的目录。这个属性通常用于读取或写入文件时指定文件相对路径,以便程序能够正确找到文件。
  • 举例说明,如果当前工作目录是/Users/username/Documents,那么System.getProperty("user.dir")将返回/Users/username/Documents。
//获取当前工作目录的路径
//String projectRootPath = ( new File("") ).getCanonicalPath();//方式1
String projectRootPath = System.getProperty("user.dir");//方式2
System.out.println("projectRootPath :" + projectRootPath);//E:\source_code\xxx\xxx-yy

5 获取用户主目录

String userHomePath = null;
userHomePath = org.apache.commons.io.FileUtils.getUserDirectoryPath();// 等效于 : System.getProperty("user.home");System.out.println("userHomePath :" + userHomePath);//C:\Users\xxxx

6 获取OS临时目录

String tempDirectoryPath = FileUtils.getTempDirectoryPath();//等效于 : System.getProperty("java.io.tmpdir")System.out.println("tempDirectoryPath :" + tempDirectoryPath);// C:\\Users\\xxxx\\AppData\\Local\\Temp\\

X 参考文献

[Java SE] Java-文件系统-常用文件路径的获取方法的更多相关文章

  1. Windows文件路径转换为java中可识别的文件路径的转义方法,(另附转义多种格式)

    ps:欢迎加qq好友:2318645572,交流学习 一:路径转化 Windows中的文件路径格式为 D:\eclipse\apache-tomcat-7.0.67\wtpwebapps\... Ja ...

  2. 牛客网Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器

    不多说,直接上干货! 获取文件名称.获取文件路径.获取文件大小.获取文件修改时间 FileMethodDemo.java package zhouls.bigdata.DataFeatureSelec ...

  3. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  4. JAVA中比较两个文件夹不同的方法

    JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...

  5. iOS文件路径相关的方法

    文件路径相关的方法在NSPathUtilities中,主要是操作路径 获得一个路径 NSString *documents = [NSSearchPathForDirectoriesInDomains ...

  6. Hosts文件路径及修改方法

    (转自:http://www.techolics.com/softdev/20111029_100.html) 什么是Hosts文件? 根据百度百科的定义,Hosts文件是一个系统文件,这是一个本地的 ...

  7. Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

  8. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  9. 将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

  10. 将Java代码打包成jar文件转换为.exe可执行程序方法

    ​ 做完学生管理系统后我想将代码打包成一个可执行程序,那样就可以直接点击在Windows下运行了,下面就跟大家分享下打包方法. 将Java的代码转换成 .exe 文件需要先把代码打包成 jar 文件然 ...

随机推荐

  1. linux sftp连接报错:JSchException: Algorithm negotiation fail解决方案

    问题描述 我们用jsch包进行ssh登录的时候会报这个错误: com.jcraft.jsch.JSchException: Algorithm negotiation fail at com.jcra ...

  2. 因为我的一次疏忽而带来的golang1.23新特性

    距离golang 1.23发布还有两个月不到,按照惯例很快要进入1.23的功能冻结期了.在冻结期间不会再添加新功能,已经添加的功能不出大的意外一般也不会被移除.这正好可以让我们提前尝鲜这些即将到来的新 ...

  3. sentinel-dashboard.jar 安装

    本文涉及的基本概念: 几种服务限流方式:熔断:拒绝流量访问,当系统恢复正常时在关闭熔断服务降级:将次要服务降级,停止服务,将系统资源释放出来给核心功能延迟处理:在前端设置一个流程缓冲池,将所有的流程全 ...

  4. Django——Media配置

    settings.py中的配置: MEDIA_ROOT 和 MEDIA_URL MEDIA_ROOT 是指:用户上传文件的根路径 --> MEDIA_ROOT = os.path.join(BA ...

  5. manjaro安装错误的显卡驱动导致无法开机(解决办法)

    手欠的我 最近发觉我的manjaro有时候开机会卡死在clean ....这个地方,然后我去看了下系统的日至,发现是nvidia的一个报错,我也不太懂什么意思 然后我就自己动手想改改显卡驱动(从pri ...

  6. RabbitMQ 进阶使用之延迟队列 → 订单在30分钟之内未支付则自动取消

    开心一刻 晚上,媳妇和儿子躺在沙发上 儿子疑惑的问道:妈妈,你为什么不去上班 媳妇:妈妈的人生目标是前20年靠父母养,后40年靠你爸爸养,再往后20年就靠你和妹妹养 儿子:我可养不起 媳妇:为什么 儿 ...

  7. MySQL学习笔记-事务

    事务 事务:是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(当操作中某一步出现异常时,前面已执行的步骤也会失 ...

  8. 逻辑卷缩容报错 xfs_growfs: /dev/new/new_box is not a mounted XFS filesystem

    [root@server ~]# xfs_growfs /dev/new/new_box xfs_growfs: /dev/new/new_box is not a mounted XFS files ...

  9. 运行报错:找不到或无法加载主类 com.xxx.Application

    springboot 项目下载到本地,用 idea 运行报错找不到或无法加载主类. 原因 项目内还没有编译,所以找不到主类文件,需要先编译项目. 解决方案 执行 mvn 编译命令: mvn compi ...

  10. Chapter1 p1 Output Image

    由于本文章是对TinyRenderer的模仿,所以并不打算引入外部库. 那么我们第一步需要解决的就是图形输出的问题,毕竟,如果连渲染的结果都看不到,那还叫什么Renderer嘛. 由于不引入外部库,所 ...