获取应用程序的路径
我最近搜索了如何使用Java获取应用程序的目录。 我终于找到了答案,但我需要很长的时间,因为寻找这样一个通用术语并不容易。 我认为编制一份如何以多种语言实现这一目标的清单是一个好主意。
如果您(不要)喜欢这个想法, 请随时上/下行投票,如果您喜欢, 请投稿 。
澄清:
包含可执行文件的目录与当前工作目录(由Unix下的pwd
给出)之间有很好的区别。 我最初对前者感兴趣,但随时可以发布确定后者的方法(澄清你的意思)。
在Java中调用
System.getProperty("user.dir")
和
new java.io.File(".").getAbsolutePath();
返回当前的工作目录。
来电
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
返回包含当前类的JAR文件的路径,或者如果直接从文件系统运行,则返回当前类的CLASSPATH元素(路径)。
例:
你的应用程序位于
C:MyJar.jar
打开shell(cmd.exe)并cd
到C: test 子目录。
使用命令java -jar C:MyJar.jar
启动应用程序。
前两个调用返回'C: test subdirectory'; 第三个调用返回'C: MyJar.jar'。
从文件系统而不是JAR文件运行时,结果将成为生成的类文件的根目录的路径
c:eclipseworkspacesYourProjectbin
该路径不包括生成的类文件的包目录。
一个完整的示例,用于获取没有.jar文件名的应用程序目录,或者直接从文件系统运行的类文件的相应路径(例如,调试时):
String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationDir.endsWith(".jar"))
{
applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer
在.NET(C#,VB,...)中 ,您可以查询当前Assembly
实例的Location
。 但是,这会附加可执行文件的名称。 以下代码清理路径( using System.IO
并using System.Reflection
):
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
或者,您可以使用AppDomain
提供的信息来搜索引用的程序集:
System.AppDomain.CurrentDomain.BaseDirectory
VB通过My
命名空间允许另一个快捷方式:
My.Application.Info.DirectoryPath
在Windows中 ,使用WinAPI函数GetModuleFileName()。 为模块句柄传入NULL以获取当前模块的路径。
链接地址: http://www.djcxy.com/p/56791.html上一篇: Get the application's path
下一篇: Changing PWD in a script to allow for accessing file without prefixing full path