在 java 中, System.getProperty("user.dir") 得到的是当前工作路径(对应命令行命令就是 linux 下的 pwd 、 windows 下的 cd ),而 System.getProperty("user.home") 得到的是当前用户主目录(对应于 linux 下的 ~ 目录、 windows 下的 document and settings\username );但如果你想得到所运行的 java 程序所在的路径,似乎并没有什么简单的方法。
比如说,有一个 pathTest.jar 包放在 D:\zeal\webdev 下,这个 jar 执行的时候需要在当前目录下读写一个 test.log 文件。如果不采用绝对路径来读写 test.log 的话,不同的 jar 运行方式会带来不同的结果:
cd D:\zeal\webdev
java -jar pathTest.jar
( test.log 将生成在 D:\zeal\webdev 目录下 )
cd E:\sun\jre\bin
java -jar D:\zeal\webdev\pathTest.jar
( test.lgo 将生成在 E:\sun\jre\bin 目录下 )
这势必造成潜在的运行错误。解决的方法是必须在程序中指定 test.log 文件的绝对路径。从本意上来讲,这里我们希望 test.log 与 pathTest.jar 位于相同的路径之下。但显然无论是 "user.dir" 还是 "user.home" 都不会返回正确的结果。
幸好, java 允许我们定位某个 class 的 CodeSource , 通过 CodeSource 提供的 Location 信息就能够找到相关的文件路径。假设 pathTest.jar 的 main class 是 pathTest ,通过
new pathTest().getClass().getProtectionDomain().getCodeSource().getLocation();
就可以得到 pathTest.jar 的完整路径( file:/D:/zeal/webdev/pathTest.jar ),接下来怎么做就简单了。当然,实际应用中一般我们会选择把所有与jar相关的资源文件一起打包进去,或者使用 "user.home" 这样的固定位置来存放;除非在特殊情况下才会需要通过这个迂回的方式来获取相关的路径信息。
注: CodeSource 得到的是类所在域信息,对于 jar 包返回的就是该 jar 包的完整路径文件名;如果是没有打包的 classpath 下的类,返回的则是该 classpath 的根路径。
分享到:
相关推荐
对于Java开发环境,如Eclipse或IntelliJ IDEA,你可以通过"构建路径"或"项目设置"将JAR包添加到项目的类路径中,这样你的代码就能访问到其中的类和方法。此外,描述中提到的`config.properties`文件是配置文件,通常...
标题中的“jtds-1.3.1.jar包,kettle连接”指的是在Kettle数据集成工具中,为了能够连接到SQL Server数据库,需要使用名为jtds的Java数据库连接器(JDBC驱动),其具体版本为1.3.1。jtds是一个开源的JDBC驱动程序,...
`lib`目录是Spoon存放依赖库的地方,将驱动放在这里,意味着Spoon启动时会自动将其加入到类路径中。 3. **配置数据库连接**:在Spoon中,你需要创建一个新的数据库连接,选择“MySQL”作为数据库类型,并输入正确的...
本资源提供的"人脸识别所用到的jar包"包含了所有必要的组件,使得开发者能够在项目中实现人脸识别的功能。这些jar包可能包括了图像处理、特征提取、模式匹配等多种功能模块。当你下载并解压这个压缩包后,你会得到一...
5. **配置构建路径**:导入jar包后,IDEA会自动将其添加到项目的构建路径中。在`Project Structure`(可通过`File` -> `Project Structure`访问)中,你可以检查`Libraries`部分,确保jar包已列出。 6. **使用jar包...
例如,如果第三方JAR包存放在名为lib的目录下,那么Class-Path属性应该这样设置: Class-Path: lib/activemq-all-5.12.1.jar 同样,Class-Path后面必须有一个空格分隔符。同时,要确保在执行JAR的同层目录下,必须...
在本实例中,我们关注的是一个名为"快递查询应用实例jar包集"的压缩文件,它包含用于快递查询的应用程序接口(API)以及一个名为"kuaidi.txt"的文本文件。这个应用集主要服务于Java开发者,特别是那些需要在自己的...
本文将详细介绍如何使用批处理文件(`.bat`)结合winsw工具来实现jar包的一键安装为服务,并通过计划任务进行守护。 首先,winsw是一个开源的、可移植的Windows服务包装器,它允许我们将任何可执行文件(包括jar...
3. **关联项目**:在IDE(如Eclipse、IntelliJ IDEA)中,你需要将这些jar包添加到项目的构建路径中。这可以通过右键点击项目 -> "Build Path" -> "Configure Build Path" -> "Libraries" -> "Add JARs..." 或 "Add ...
在标题中提到的"druid.1.1.10.jar"是该组件的特定版本,即1.1.10版本的jar包。这个版本的发布旨在提供稳定性和性能优化,同时也可能包含一些新功能或者对旧有特性的改进。 Druid数据库连接池是Java应用程序中用于...
本教程将详述如何在MyEclipse 8.5集成开发环境中配置Axis2的完整jar包,以实现高效的Web服务开发。 首先,我们需要了解Axis2。Axis2是Apache SOAP(简单对象访问协议)引擎的下一代版本,它提供了高性能、灵活且可...
2. **选择存放路径**:指定项目存放的位置。 3. **进入配置界面**:根据提示进入配置界面。 4. **选择 jar 转换 exe 模式**:在配置界面中选择将 jar 文件转换为 exe 文件的模式。 5. **自定义名字和选择输出路径**...
5. 执行上述命令后,maven会在本地仓库中创建相应的目录结构,并将jar包存放到相应的位置。此时,该jar包就可以被本地的maven项目所识别和使用了。 除了上述导入操作,文档中还简要介绍了Maven的一些基础命令及其...
其中,`project.basedir`变量指的是项目的根目录,`lib`是存放本地jar文件的目录,具体路径根据实际情况调整。 3. 在构建项目时,Maven会查找并使用这个本地定义的依赖,而不是尝试从远程仓库下载。 此外,使用...
在Java项目中,"lib"目录下存放的是外部库的JAR文件,这些文件在运行或构建项目时会被引用。开发者通常会把这些库添加到类路径(Classpath)中,以便程序能够正确地访问并使用它们的功能。 关于xyz.erupt框架,我们...
至于【压缩包子文件的文件名称列表】中只列出了"libs",这很可能是一个目录名,通常在Java项目中,"libs"目录用于存放依赖库和外部JAR文件。在这个案例中,它可能包含了实现LTP Java接口的JAR文件和其他必要的库,如...
这里的"path/to/ant-jakarta-regexp.jar"应替换为你实际存放JAR文件的路径。 加载了扩展库后,你就可以在Ant任务中使用Jakarta Regexp的功能。例如,你可以创建一个自定义的任务,使用正则表达式处理文件或目录。...
在描述中提到的"jar.zip包下载"意味着用户可以下载这个压缩文件,解压后得到JAR文件。"依赖包"一词暗示了aduna-commons-iteration-2.2.jar可能依赖于其他Java库才能正常工作。在Java项目中,依赖管理是至关重要的,...
3. **指定jar文件位置**:选择好存放jar文件的路径,并继续下一步。 4. **配置打包设置**:根据需要调整打包设置,例如是否包含源代码、Javadoc等,然后继续。 5. **选择主类**:在“Main Class”字段中选择项目...