当前位置: 首页 > news >正文

获取程序运行目录 (jar运行目录)

FileSystems.getDefault().getPath("").toAbsolutePath().toString()

Path.get(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent()
这两个代码片段在Java中用于获取不同的路径,尤其在打包为JAR文件运行时会有显著差异:

 

--1. `FileSystems.getDefault().getPath("").toAbsolutePath().toString()`

- **功能**:  

  获取**当前工作目录**(Current Working Directory)的绝对路径。  

  - 这里的当前工作目录是启动JVM时用户所在的目录(例如,命令行中执行`java -jar app.jar`时所在的路径)。

  - 如果在IDE中运行,通常是项目根目录或配置的某个运行目录。

 

- **JAR运行时行为**:  

  假设用户执行以下命令:  

  ```bash

  cd /home/user/documents

  java -jar /path/to/app.jar

  ```

  这段代码将返回:`/home/user/documents`,即用户执行命令时的当前目录,而不是JAR文件所在的位置。

 

- **适用场景**:  

  需要动态获取用户当前操作目录的场景(例如处理用户通过命令行参数指定的相对路径文件)。

 

---2. `Path.of(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent()`**

- **功能**:  

  获取**JAR文件所在的目录**(或类文件目录,如果未打包为JAR)的父路径。  

  - `getCodeSource().getLocation()` 返回的是类加载的源位置(例如JAR文件的路径)。

  - `toURI()` 和 `Path.get()` 用于将URL转换为文件系统路径。

  - `getParent()` 会去掉JAR文件名,返回其父目录。

 

- **JAR运行时行为**:  

  假设JAR文件路径为:`/opt/myapp/app.jar`,无论用户从哪里执行JAR(如`java -jar /opt/myapp/app.jar`或`cd /home/user; java -jar /opt/myapp/app.jar`),这段代码会返回:`/opt/myapp`。

 

- **注意事项**:  

  - 如果类是从非文件系统(如网络、内存)加载的,`getCodeSource().getLocation()` 可能返回`null`或不可解析的URI,导致异常。

  - 需要处理`URISyntaxException`和`NullPointerException`。

 

- **适用场景**:  

  需要定位JAR文件所在目录的场景(例如读取同目录下的配置文件或资源)。

### **实际示例**

假设JAR路径为`/opt/app/myapp.jar`,用户执行:  

```bash

cd /home/user

java -jar /opt/app/myapp.jar

```

- **代码片段1**返回:`/home/user`(当前工作目录)。  

- **代码片段2**返回:`/opt/app`(JAR所在目录)。

 

---

 

### **如何选择?**

- 需要**动态读取用户工作目录**(如处理用户输入的文件):用代码片段1。

- 需要**定位JAR自身路径**(如读取同目录的配置文件):用代码片段2,但需处理异常。

相关文章:

获取程序运行目录 (jar运行目录)

FileSystems.getDefault().getPath("").toAbsolutePath().toString() 和 Path.get(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() 这两个代码片段在Java中用于获取不同的路径,尤其在打包为JAR文件运行时会有显…...

Elasticsearch:如何使用 Elastic 检测恶意浏览器扩展

作者:来着 Elastic Aaron Jewitt 当你的 CISO 询问你的任何工作站上是否安装过特定的浏览器扩展时,你多快能得到正确答案?恶意浏览器扩展是一个重大威胁,许多组织无法管理或检测。这篇博文探讨了 Elastic Infosec 团队如何使用 os…...

Oracle CDB自动处理表空间不足脚本

之前我曾经发过一个自动处理表空间的脚本,可以通过定时任务自动处理表空间不足的问题;但是之前那个脚本没有涵盖CDB模式下的PDB,这里将脚本做了一下更新,可以处理CDB模式下多PDB的表空间问题。 传统模式的脚本请参考这个链接 Or…...

java-list深入理解(流程图)

List源码学习: 此篇文章使用流程图和源码方式,理解List的源码,方便记忆 核心逻辑流程图: #mermaid-svg-BBrPrDuqUdLMtHvj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BBrPrDuqUdLMtHvj .error-icon{fill:#…...

Vue 中的 keep-alive 组件是什么?

Vue 中的 keep-alive 组件 keep-alive 是 Vue.js 提供的一个内置组件,用于在组件切换时缓存组件的状态。它可以有效提高用户体验,特别是在需要频繁切换视图的场景中,例如在 SPA(单页面应用)中。 目录 什么是 keep-alive如何使用 keep-alive属性介绍实际示例注意事项总结…...

单元测试的入门实践与应用

单元测试的目的是验证代码中最小的可测试单元(通常为函数或方法)是否按预期运行。它应当独立于系统的其他部分,并专注于特定的功能。 在软件开发中,单元测试是确保代码质量与可维护性的核心环节。优秀的单元测试不仅能帮助开发者…...

【大模型】硅基流动对接DeepSeek使用详解

目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…...

[Windows] PDF补丁丁v1.1.0.4627绿色版

[Windows] PDF补丁丁 链接:https://pan.xunlei.com/s/VOIdp50MV2BkOrFott_SCev1A1?pwdvbw4# PDFPatcher 是一款专门用于编辑 PDF 文件的软件,其主要功能包括添加、删除、修改、替换和提取 PDF 文件中的文本、图像、页面等内容,以及支持密码…...

Oracle 变更redo log文件位置

更改Oracle数据库的Redo log文件位置,可以按照以下步骤操作。 1.查询当前Redo log文件信息 select * from v$log; select * from v$logfile;通过查询结果可知Redo log文件放在/oradata/redofile 目录下。 2.拷贝redo log文件到新的位置/Data/redolog $cd /orada…...

使用Redis实现业务信息缓存(缓存详解,缓存更新策略,缓存三大问题)

一、什么是缓存? 缓存是一种高效的数据存储方式,它通过将数据保存在内存中来提供快速的读写访问。这种机制特别适用于需要高速数据访问的应用场景,如网站、应用程序和服务。在处理大量数据和高并发请求时, 缓存能显著提高性能和用户体验。 Redis就是一款常用的缓存中间件。…...

已验证正常,Java输入字符串生成PDF文件

Java输入字符串生成PDF文件过程&#xff1a; 在Java开发中&#xff0c;如何将字符串转换为 PDF 是一个常见的需求。网上找了很多例子都无法生成&#xff0c;经过多次尝试&#xff0c;终于实现了&#xff0c;特此记录一下。 1、引入pom.xml 添加所需的依赖 <dependency>&…...

android手机安装deepseek-r1:1.5b

序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…...

51单片机俄罗斯方块清屏函数

/************************************************************************************************************** * 名称&#xff1a;LED_Clr * 功能&#xff1a;清屏 * 参数&#xff1a;NULL * 返回&#xff1a;NULL * 备注&#xff1a;temp数组为动态显示数据&#xff…...

PLSQL: 存储过程,用户自定义函数[oracle]

注意: raise notice是高斯的输出语句; DBMS_OUT_PUT.PUT_LINE是oracle的输出语句 存储过程 Stored Procedure 存储过程可以封装数据访问逻辑&#xff0c;使得应用程序可以通过调用存储过程来执行这些逻辑&#xff0c;而不是直接执行SQL语句。这有助于提高代码的可重用性、可…...

深度学习-医学影像诊断

以下以使用深度学习进行医学影像&#xff08;如 X 光片&#xff09;的肺炎诊断为例&#xff0c;为你展示基于 PyTorch 框架的代码实现。我们将构建一个简单的卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;使用公开的肺炎 X 光影像数据集进行训练和评估。 1. 安装必…...

备战蓝桥杯:双指针(滑动窗口)算法之逛花展

P1638 逛画展 - 洛谷 | 计算机科学教育新生态 这道题我们只要用一个kind和一个mp[N]的数组就能解决了 我们的解法1就是暴力枚举&#xff0c;先固定2&#xff0c;从2开始找连续的满足所有种类的最短的子数组&#xff0c;然后固定5&#xff0c;3&#xff0c;1&#xff0c;3&…...

Linux如何设置软件开机启动呢?

有很多软件&#xff0c;我们安装完之后&#xff0c;服务器一旦重启&#xff0c;软件也需要我们手动再次启动&#xff0c;有很多的软件我们不想手动重启&#xff0c;例如Redis、Mysql、MQ等&#xff0c;那我们怎么配置软件跟着服务器也一起启动呢&#xff0c;今天就给大家带来软…...

Vue(3)

一.生命周期及其四个阶段 Vue生命周期&#xff1a;一个Vue实例从创建到销毁的整个过程 生命周期四个阶段&#xff1a;①创建②挂载③更新④销毁 <body><div id"app"><h3>{{ title }}</h3><div><button click"count--"&…...

11vue3实战-----封装缓存工具

11vue3实战-----封装缓存工具 1.背景2.pinia的持久化思路3.以localStorage为例解决问题4.封装缓存工具 1.背景 在上一章节&#xff0c;实现登录功能时候&#xff0c;当账号密码正确&#xff0c;身份验证成功之后&#xff0c;把用户信息保存起来&#xff0c;是用的pinia。然而p…...

第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)

简单来说&#xff0c; Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类&#xff0c;旅客(线程)分别手持登机牌和身份证接受工作人员的检查&#xff0c;示例代码如所示。…...

openclaw v2026.3.24 版本发布:从OpenAI模型与Embedding到Teams与Slack交互 全链路体验与稳定性一次补齐

一、版本更新概览 openclaw于2026年3月25日正式发布v2026.3.24版本&#xff0c;本次更新聚焦OpenAI生态兼容、智能体工具能力、多平台交互体验、技能安装与管理、CLI与容器支持、UI界面优化、运行时兼容性等核心方向&#xff0c;同时修复了大量安全、稳定性与多平台适配问题&am…...

探索800+免费接口:API资源库的高效集成指南

探索800免费接口&#xff1a;API资源库的高效集成指南 【免费下载链接】public-api-lists A collective list of free APIs for use in software and web development &#x1f680; (Clone of https://github.com/public-apis/public-apis) 项目地址: https://gitcode.com/G…...

SAC算法实战:用PyTorch实现自动驾驶控制(附完整代码)

SAC算法实战&#xff1a;用PyTorch构建自动驾驶控制系统 在自动驾驶技术快速发展的今天&#xff0c;强化学习已成为解决复杂决策问题的有力工具。而Soft Actor-Critic&#xff08;SAC&#xff09;算法凭借其在连续动作空间中的卓越表现&#xff0c;正在成为自动驾驶控制领域的新…...

cv_unet_image-colorization稳定性验证:连续72小时高负载运行无内存泄漏

cv_unet_image-colorization稳定性验证&#xff1a;连续72小时高负载运行无内存泄漏 1. 项目简介与测试背景 在AI工具的实际应用中&#xff0c;稳定性与可靠性往往比惊艳的演示效果更为重要。一个工具能否在长时间、高负载的场景下稳定运行&#xff0c;直接决定了它能否从“玩…...

Python多解释器不是“未来技术”——它已在金融高频交易系统稳定运行417天(附完整监控看板截图)

第一章&#xff1a;Python多解释器的核心机制与历史演进Python长期以来以全局解释器锁&#xff08;GIL&#xff09;为标志性设计&#xff0c;单解释器模型主导了其执行范式。然而&#xff0c;随着多核硬件普及与异步编程兴起&#xff0c;对真正并行执行、内存隔离及轻量级运行时…...

如何通过CPUDoc免费优化CPU性能:5大核心功能全面指南

如何通过CPUDoc免费优化CPU性能&#xff1a;5大核心功能全面指南 【免费下载链接】CPUDoc 项目地址: https://gitcode.com/gh_mirrors/cp/CPUDoc 还在为电脑运行卡顿、游戏帧率不稳而烦恼吗&#xff1f;CPUDoc这款免费开源工具能够通过智能线程调度和动态电源管理&…...

COMSOL能源开采仿真:基质中瓦斯扩散、裂隙中瓦斯渗流,分析不同工况条件下渗透率演化、有效抽...

COMSOL能源开采仿真&#xff1a;基质中瓦斯扩散、裂隙中瓦斯渗流&#xff0c;分析不同工况条件下渗透率演化、有效抽采半径、抽采产量。 使用模块&#xff1a;PDE&#xff08;基质瓦斯扩散&#xff09;&#xff0c;达西定律/PDE&#xff08;裂隙瓦斯渗流&#xff09;&#xff0…...

Tauri开发手记——1.从零到一:环境搭建与首次构建实战

1. 环境准备&#xff1a;从零搭建Tauri开发环境 第一次接触Tauri开发时&#xff0c;环境搭建往往是最让人头疼的环节。作为一个跨平台桌面应用框架&#xff0c;Tauri需要同时处理前端和后端&#xff08;Rust&#xff09;的依赖关系。我在Windows系统上踩过不少坑&#xff0c;现…...

C++程序员逆袭之路:手把手教你转行大模型算法岗!

作为一名C程序员&#xff0c;你拥有强大的编程能力和对底层系统深入理解的优势。然而&#xff0c;如果你对大数据、深度学习和算法设计充满热情&#xff0c;转行到大模型算法岗位可能是一个充满挑战和机遇的职业转变。本文将为你提供一份详细的转行指南&#xff0c;帮助你从C开…...

SEO_新手必看的SEO优化入门教程与基础操作指南

<h2>SEO优化入门&#xff1a;为新手量身打造的指南</h2> <p>SEO优化&#xff0c;也就是搜索引擎优化&#xff0c;是一个让你的网站在搜索引擎结果中获得更高排名的过程。对于新手来说&#xff0c;SEO可能看起来有点复杂&#xff0c;但只要掌握了一些基础的操…...