java File AbsolutePath的路径不正确

控制科学与工程(自动化)保研经验【2】——南开、同济篇 禁止转载 1、南开人工智能学院夏令营   保研之旅第一个夏令营就是南开,南开夏令营非常早(6月份),当时我们专业仅有两人入营。夏令营前一天我们两个坐高铁来到了天津,几经辗转来到了南开的津南校区,非常偏僻。在自己找的酒店住了一晚,第二天一早去学院报到,资格审查、报销路费等等,然后开营仪式,吃饭,入住酒店,实验室参观。   开营仪式和实验室参观了解到,南开人工智能学院是国内第一批人工智能学院,和很多高... 阅读详情

前言

最近做项目,出现一件特别不能理解的事情,文件的实际路径与绝对路径差别很大。其中绝对路径差距很大。当设置user.dir系统变量时,绝对路径就是不对的。

demo

模拟奇特路径的demo,可以看到AbsolutePath和文件真实的路径相差太远了

public class FileUtils {

    public static void main(String[] args) {
        File file = new File(".");
        System.out.println(file.getAbsolutePath());
        Arrays.stream(file.listFiles()).forEach(p -> System.out.println(p.getAbsolutePath()));
//        Arrays.stream(file.listFiles()).forEach(p -> System.out.println(p.getPath()));
//        Arrays.stream(file.list()).forEach(System.out::println);
//        System.out.println(file.getAbsolutePath());
    }
}

可以看到路径是

 

但是当VM参数设置-Duser.dir=xxx,

这里以 -Duser.dir=/Users/huahua为例

但是目录下根本没有这个文件啊,如果相对路径再复杂一点,直接就出问题了

public class FileUtils {

    public static void main(String[] args) {
        File file = new File("./go");
        System.out.println(file.exists());
        System.out.println(file.getAbsolutePath());
        Arrays.stream(file.listFiles()).forEach(p -> System.out.println(p.getAbsolutePath()));
//        Arrays.stream(file.listFiles()).forEach(p -> System.out.println(p.getPath()));
//        Arrays.stream(file.list()).forEach(System.out::println);
//        System.out.println(file.getAbsolutePath());
    }
}

得出结果

那么真实的路径是

 真实路径与没有设置user.dir的情况一样。

 这个为啥影响绝对路径呢,因为很可能因为路径问题导致生产事故。

原理

 根据上面的实际测试,相对路径是相对当前user.dir而言的,那么绝对路径呢

 userDir

    private static final String USER_DIR  = initProperty("user.dir");

    private static String initProperty(String key) {
    String v = System.getProperty(key);
        if (v == null) {
            throw new InternalError("null property: " + key);
        }
        return v;
    }

那么真实的user.dir是,不设置VM -Duser.dir参数

 可以看出实际上,user.dir真实为当前的根路径,设置-Duser.dir并不会影响实际的文件路径,但是AbsolutePath就会不一致

那么使用绝对路径new File呢

    public String resolve(File f) {
        if (isAbsolute(f)) return f.getPath();
        SecurityManager sm = System.getSecurityManager();
        if (sm != null) {
            sm.checkPropertyAccess("user.dir");
        }
        return resolve(userDir, f.getPath());
    }

if (isAbsolute(f)) return f.getPath();

如果是绝对路径不再拼接,所以绝对路径是绝对准确的,相对路径就会出问题。

总结

不知道为什么File的AbsolutePath要取系统变量,而实际文件的地址却是另外的地址,这很容易导致文件路径不对,导致读取不到。关键在于读取绝对路径使用user.dir但是文件的真实路径与绝对路径不对应。

14、多层螺旋 CT 技术详解 本文详细解析了多层螺旋CT(MSCT)技术的原理与应用,涵盖其相对于单层螺旋CT的优势,包括图像采集速度提升、分辨率提高和噪声降低。文章深入探讨了扫描仪的几何结构、离散投影模型以及关键参数如切片宽度和螺距的影响,并重点介绍了z-滤波重建算法及其离散实现流程。通过流程图和公式推导,系统梳理了从投影获取到图像重建的全过程。同时分析了MSCT在临床中的实际应用案例及未来发展趋势,如更高分辨率、更低辐射剂量和智能化算法等方向,全面展示了MSCT在现代医学影像中的核心价值。 阅读详情

相关推荐

手把手教你:在联想/戴尔笔记本上安装华为电脑管家,实现多屏协同(附详细避坑步骤)

本文详细指导如何在联想、戴尔等非华为笔记本上安装华为电脑管家,实现多屏协同功能。从硬件兼容性检查到定制化安装流程,再到功能调优与异常处理,提供了一套完整的解决方案,帮助用户突破品牌限制,享受华为生态的高效办公体验。

weixin_30251829的博客 845

Java文件操作详解

Java 文件 Java IO教程 - Java文件 File类的对象是文件或目录的路径名的抽象表示。 创建文件 我们可以从中创建一个File对象 路径名 父路径名和子路径名 URI(统一资源标识符) 我们可以使用File类的以下构造函数之一创建一个文件: File(String pathname) File(File parent, String child) File(String parent, String child) File(URI uri) 如果我们有一个文件路径名字符串test.tx

qq_44430911的博客 2706

电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002)

本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。

weixin_27076351的博客 244

java -Duser.dir参数

在java中, system.getProperties()是获取系统定义的参数,用来获取系统信息。 user.dir:该属性表明当前用户所在的目录。 这样描述比较抽象,可以举个例子: java代码: public class Main { public static void main(String[] args) { System.out.println(S...

kuwoleft 640

四十二、Fluent欧拉模型流化床模拟:从基础设置到颗粒动力学解析

本文详细解析了Fluent欧拉模型在流化床模拟中的应用,从基础概念到颗粒动力学设置全面覆盖。重点介绍了欧拉模型的颗粒温度概念、多相流配置技巧以及关键参数优化策略,帮助工程师准确模拟气固两相流动现象。通过实用案例演示了网格检查、求解器配置和边界条件设置的最佳实践。

weixin_27303545的博客 445

家用电器维修必备:手把手教你用双向可控硅改造单相电机调速(附电路图)

本文提供了一份详细的家用电器维修指南,手把手教你如何利用双向可控硅为核心元件,为单相交流电机(如风扇、排气扇)实现平滑的无级调速改造。内容涵盖核心原理、安全须知、元件选型(如BT136、DB3)、电路图解析、分步搭建教程以及常见故障排查方法,旨在帮助维修爱好者和DIY用户安全、成功地完成这一实用且富有成就感的项目。

read5的博客 835

解析相对路径和绝对路径(以图片为例)

以图片为例,详细解释了相对路径与绝对路径的区别及其用法

SSS4362的博客 7184

x86架构学习之中断

外部中断,一般是由CPU的外部引脚电信号触发,这些引脚留给硬件厂商去定义中断,例如主板厂商可以将USB中断挂载70号中断引脚上,MCU厂商可以将片上外设(SPI、I2C等)的中断挂载在指定中断线上。中断描述符主要用于说明该中断的入口地址,中断描述符表则是将中断描述符一项一项管理在一个数组中,每一项中断描述符占用8个字节(64位模式下,占用16字节),其。简称中断,后文如果没特别说明,中断都指外部中断,由外部IO事件触发,由于时钟源来自CPU外部,与CPU时钟不同源,因此是异步事件。

qq_26962739的博客 1571

Android 之图片本地缓存解决方案

Android 之图片本地缓存解决方案 对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量就用完了,等用户发现是你的应用消耗掉了他手机流量的话,那么可想而知你的应用将面临什么样的命运。 对于图片资源来说,你不可能让应用每次获取的时候都重新到远程去下载,这样会浪费资源,但是...

筱夜宫主 499

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文详细介绍了如何在PHP项目中快速集成SM4国密加密算法,提供完整的代码实现和实际应用示例。从算法原理到核心代码解析,再到性能优化与安全实践,帮助开发者高效实现数据加密功能,满足金融、政务等领域的合规需求。

weixin_29315569的博客 354

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

本文通过15个实战案例,系统讲解VSCode进行Python开发的环境配置、编码技巧、调试方法及性能优化,帮助初学者快速构建专业开发环境。

赶紧的博客 3737

一文搞懂Java中相对路径与绝对路径

Java相对路径详解

m0_56789807的博客 6412

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 105

java file类路径问题_【转】JAVA中file路径问题

这篇写的相当好。收藏前言Java的路径问题,非常难搞。最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题。我编写了一个方法,比ClassLoader.getResource(String 相对路径)方法的能力更强。它可以接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源。这样,我们就可以使用相对于classpath的路径,定位所有位置的资源!...

weixin_34431256的博客 2065

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【查漏补缺】File的path、absolutePath和canonicalPath的区别

背景 在学习Idea的插件开发时,用到了相关的VirtualFileSystem这个东西,里面的VirtualFile有一个getCanonicalPath()方法引起了我的注意,我发现我不知道—— 科普 首先知晓一下几个名词——路径、绝对路径/相对路径、规范路径 然后考虑以下几种路径: c:\temp\file.txt .\file.txt c:\temp\MyApp\bin\..\..\fi...

weixin_30762087的博客 2180

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA 使用File对象的path、absolutePath和canonicalPath的区别

首先知晓一下几个名词——路径、绝对路径/相对路径、规范路径然后考虑以下几种路径:c:\temp\file.txt.\file.txtc:\temp\MyApp\bin\..\..\file.txt第一类,属于路径,绝对路径,规范路径第二类,属于路径,相对路径第三类,属于路径,绝对路径我们结合自己的开发经验,发现绝大多数情况...

weixin_30340269的博客 617

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Java 进阶】File类知识详解、绝对路径和相对路径的区别

File 类 笔记,供自己方便查看 0.看看绝对路径和相对路径是啥哈 绝对路径:从盘符开始的路径,这是一个完整的路径。 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。 天涯海角找到你和只能在眼前找到你的区别 public class FilePath { public static void main(String[] args) { // D盘下的bbb.java文件 File f = new File("D:\\bbb.java");

汪汪杂记 2721

java绝对路径和相对路径_Java文件路径,绝对路径和规范路径

java绝对路径和相对路径Today we will look into the Java file path. Java File path can be abstract, absolute or canonical. 今天,我们将研究Java文件路径。 Java File路径可以是抽象的,绝对的或规范的。 Java文件路径 (Java File Path) java.io.File co...

从零开始的教程世界 1556

Java的AbsolutePath与RealPath的区别

虽然是给Java类做实验,但我们不需要创建Java文件和编译,太麻烦,可以方便的用scala的命令行解析器做实验,有代码提示和补全功能,非常方便。导入java.nio.file.*:scala> import java.nio.file._ import java.nio.file._Paths.get只是对字符串进行Path封装scala> val path = Paths.get("..") p

The Beauty of Software 4476

java文件夹路径的表达_小师妹学JavaIO之:文件File和路径Path

简介文件和路径有什么关系?文件和路径又隐藏了什么秘密?在文件系统的管理下,创建路径的方式又有哪些?今天F师兄带小师妹再给大家来一场精彩的表演。文件和路径小师妹:F师兄我有一个问题,java中的文件File是一个类可以理解,因为文件里面包含了很多其他的信息,但是路径Path为什么也要单独一个类出来?只用一个String表示不是更简单?更多精彩内容且看:万物皆有因,没有无缘无故的爱,也没有无缘无故的恨...

weixin_39824801的博客 189

java file path abstract path absolute path canonical path

1. path,普通路径名,由getPath()方法返回,就是你构造File时指定路径名。如File f = new File("testFile.txt");则f.getPath()返回的就是"testFile.txt". 2.abstract pathname,根据File的toString方法的说明,这个也是getPath()返回的结果,和上面的一样。 String java.io.Fi

mlzhu007的专栏 2703

Java File.separator与pathSeparator本质区别及跨平台避坑指南

在Java跨平台开发中,文件路径分隔符(separator)和路径列表分隔符(pathSeparator)是两个基础但极易混淆的核心概念。它们并非运行时动态适配的工具,而是JVM启动时依据操作系统类型固化下来的底层环境指纹,分别对应单路径层级结构与多路径并列语法。理解其静态性、语义边界与初始化原理,对避免CLASSPATH解析失败、JNI库加载异常、容器化部署故障等生产问题至关重要。实际工程中应优先使用Paths.get()处理本地路径,用URI构建网络资源地址,并严格按场景选用File.separator

weixin_30333885的博客 490

java如何取路径里的文件名_java怎么从绝对路径中取出除了文件名的路径

java怎么从绝对路径中取出除了文件名的路径关注:224答案:3mip版解决时间 2021-02-05 14:51提问者日光獨自傾城2021-02-04 21:19例如:我的函数的参数给进去是绝对路径:E:\com\1.txt想让返回的结果是E:\com,应该怎么取出来?求大神解决最佳答案二级知识专家月洸芐啲溫拵2021-02-04 22:18如果是多个文件的话,可以通过遍历某个文件夹查找...

weixin_36017951的博客 927

File类--java常用API

File类的概述和API import java.io.File; /** 目标:File类的概述和API File类:代表操作系统的文件对象。 File类:是用来操作操作系统的文件对象的,删除文件,获取文件信息,创建文件(文件夹)... 广义来说操作系统认为文件包含(文件和文件夹) File类的创建文件对象的API: 包:java.io.File (1)构造器: -- public File(Strin

~~河*涌--湖的博客 386

java基础

java获取当前路径的几种 方法:String property = System.getProperty("user.dir");//获取当前项目路径System.out.println(property);File file=new File(".");try {String canonicalPath = file.getCanonicalPath();//相对路径String ab=fil...

bixiu3460的博客 130

取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径

经过试验,不管是否是Jar包,不管是否是Tomcat部署,以下三个方法均可实现。package test;public class MyPath {public static String getProjectPath() {java.net.URL url = MyPath.class.getProtectionDomain().getCodeSource().getLocation();Str...

weixin_34624426的博客 208
上一篇: websocket 传输文件
下一篇: macOS kubernetes 安装,并安装dashboard
fenglllle
博客等级 码龄8年 461粉丝 242原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值