java中关于获取程序运行时资源路径的方法,在iteye中搜索到了几个。下面我对这几种写法做个实验。
说明:实验分直接编译运行和用fat jar打成包后运行两部分,因为我相信这个定位资源的问题正是在打包后和在linux服务器上运行时才会遇到的。Eclipse工程名testjar,位于E:\Java\Workspaces\,工程内只有一个类dut.ir.TestJar,资源文件1位于dut/ir/。fat jar选项不选One-Jar。
先来看Class.getResource()方法
public class TestJar
{
public static void main(String[] args)
{
System.out.println(TestJar.class.getResource(资源名));
}
}
如果资源名填"/",Eclipse里运行时这个方法返回“file:/E:/Java/Workspaces/testjar/bin/”,而在打包后运行时返回null;
如果资源名填"",Eclipse里运行返回“file:/E:/Java/Workspaces/testjar/bin/dut/ir/”,而在打包后运行则返回“jar:file:/E:/Java/Workspaces/testjar/testjar_fat.jar!/dut/ir/”,也就是类所在的完整路径(文件系统路径+包路径);
如果资源名以'/'开头,如"/dut/ir/1",Eclipse运行结果“file:/E:/Java/Workspaces/testjar/bin/dut/ir/1”,打包运行结果则是“jar:file:/E:/Java/Workspaces/testjar/testjar_fat.jar!/dut/ir/1”,也就是说在包结构的根位置寻找,若资源名写“/1”或"/ir/1"是找不到的;
如果资源名不以'/'开头,如"1",Eclipse运行结果“file:/E:/Java/Workspaces/testjar/bin/dut/ir/1”,打包运行结果则是“jar:file:/E:/Java/Workspaces/testjar/testjar_fat.jar!/dut/ir/1”,也就是说在类所在的位置上寻找,若资源名写"dut/ir/1"就意味着定位dut/ir/dut/ir/1,当然找不到;
再实验TestJar.class.getClassLoader().getResource(资源名),ClassLoader.getSystemResource(资源名)和Thread.currentThread().getContextClassLoader().getResource(资源名)方法,它们的结果和TestJar.class.getResource("/" + 资源名)相同。关于原因,这在jdk中Class.getResource方法的说明
写道
此方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String)。
那么,如果想在jar包所在的位置定位资源怎么办?再看看这几个方法:
System.out.println(System.getProperty("user.dir"));
System.out.println(System.getProperty("java.class.path"));
System.out.println(new File("").getAbsolutePath());
System.out.println(TestJar.class.getProtectionDomain().getCodeSource().getLocation().getFile());
输出
E:\Java\Workspaces\testjar
E:\Java\Workspaces\testjar\bin
E:\Java\Workspaces\testjar
/E:/Java/Workspaces/testjar/bin/
如此,可以利用System.getProperty("user.dir")或new File("").getAbsolutePath()这两种写法。
注意:我这里都是直接引用类来实验这些方法,而没有实例化。进来看过的学长如有指正敬请回复,多谢!
分享到:
相关推荐
【关键路径实验报告】 在IT领域,关键路径是一种项目管理技术,用于确定完成特定工程或任务所需的最短时间。此实验报告围绕一个程序设计,旨在求解关键路径问题,适用于工程估算,帮助决策者了解项目的最短工期和...
### Dijkstra与Floyd方法求最短路径实验报告知识点总结 #### 实验背景与目标 本次实验旨在通过实际操作加深对最短路径算法的理解。实验选取两种经典算法——Dijkstra算法与Floyd算法,分别针对特定场景求解最短路径...
【运筹学最短路径实验】是物流管理中一个重要的计算问题,主要目的是寻找在给定网络中两点间最短的路径,以优化运输效率和降低成本。本实验以Dijkstra算法作为解决最短路径问题的核心工具,该算法是图论中的经典算法...
数据结构是计算机科学中的核心...总结起来,这个实验旨在通过实践巩固数据结构中的图理论知识,特别是邻接表的使用,以及关键路径的计算方法。这对于理解和解决实际问题,如项目管理和资源调度,具有重要的应用价值。
本资源是关于基于贪心法求解单源最短路径问题的实验报告,包括实验内容、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试等部分。 实验目的:理解贪心法的核心思想、贪心法的求解过程,并从算法分析...
仿真实验结果显示,采用本文提出的优化算法进行私有云计算平台上的资源最优路径匹配,能有效提高资源路径匹配的准确度,从而提高资源搜索成功率,实现资源优化共享,并展现出优越的适用价值。这表明,通过算法优化,...
总结来说,"数据结构导航最短路径查询课外实践"是一个结合理论与实践的学习项目,它涵盖了数据结构和算法的核心内容,并将这些知识应用于解决实际的最短路径查询问题。参与这样的实践,对于提升IT专业学生的综合能力...
在“硬件课程设计+实验总结”这个主题中,我们可以深入探讨计算机硬件与编程指令的相关知识。这涵盖了计算机系统的基础,包括处理器、内存、输入/输出设备以及如何通过代码与这些硬件组件交互。以下是对这些知识点的...
- **总结与反思**:对实验的理解,收获与存在的不足,以及对未来的建议。 5. **考试资料关联** 该实验与“计算机网络”课程紧密相关,涵盖了网络层的关键概念,对于理解和应对相关考试至关重要。实验报告是评估...
无向图是图论中的一个基本概念,是图的一种特殊形式。...总结,这个实验报告深入浅出地介绍了无向图的概念、数据结构和相关算法,结合实际的软件应用,使得理论知识与实践相结合,是学习无向图理论和算法的宝贵资源。
【人力资源管理实验报告】 本次实验主要涵盖了三个核心领域:模拟招聘实验、职业性格测试和无领导小组讨论,旨在提升学生在人力资源管理方面的实践能力和理论理解。 **1. 模拟招聘实验** 模拟招聘实验的主要目的...
总结而言,这篇文章通过深入分析多路径网络异构服务的分布式资源分配算法,展示了如何通过数学建模与算法设计来解决当前网络资源管理中的关键问题。通过对非凸优化问题的近似处理与分布式计算方法的结合,这篇文章为...
5. **培训的价值**:定期的专业培训有助于提升教师的教育观念和理论素养,解决实际教学中遇到的问题,为青年教师提供成长平台,同时也为实验教学的改进提供了有效的路径。 通过这样的培训,教师们能够深入理解化学...
需要根据专业综合实验的需求,整合分散的实验室资源,创建科学的实验室体系,为实验教学提供便利,并便于管理。实验室管理制度应确保设备正常运行,实验考核制度需全面评估实验的各个环节,以促进学生的创新思维。 ...
#### 四、实验总结 实验的重点在于安全性算法的设计逻辑,特别是findProcess()函数的实现。此外,实验中存在的不足之处是没有输出资源分配表和执行安全性算法的过程,这可能会使得资源数量的变化不够直观。未来可以...
总结来说,这个压缩包提供了关于MATLAB解决优化问题,特别是动态优化和路径规划问题的资源。通过深入研究这些内容,你将能够利用MATLAB的强大功能解决实际工程中的优化挑战,为机器人导航、物流调度等问题找到最优解...
【课题名称】基于物联网技术的...【总结】此课题的实施将有助于推动实验室管理的现代化进程,提升高校实验室的运营效率和安全性,同时也为我国物联网技术在教育领域的应用开辟新的路径,具有重要的理论价值和实践意义。
算法设计和实现后需要进行测试,实验结果将展示算法在给定的图中寻找所有路径的效能。作者提供的实验结果中列出了在不同图中找到的所有路径的例子,证明算法的有效性。 6. 开发环境与调试 在开发环境中,特别是使用...
根据给定的实验报告标题、描述以及部分内容,我们可以推断出该实验报告主要涉及的是“最短路径问题”在贪心算法中的应用。下面将基于这些信息,详细地阐述各个部分涉及的知识点。 ### [一] 问题描述 **原问题描述*...