获取应用程序的路径

我最近搜索了如何使用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.IOusing 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