Kon*_*lph 79 language-agnostic path
我最近搜索了如何用Java获取应用程序的目录.我终于找到了答案,但我需要很长时间才能找到这样一个通用术语并不容易.我认为编译一个如何用多种语言实现这一目标的列表是一个好主意.
如果您(不)喜欢这个想法,请随意上/下投票,如果您愿意,请提供帮助.
包含可执行文件的目录和当前工作目录(由pwdUnix下给出)之间有一个很好的区别.我最初对前者感兴趣,但也可以随意发布确定后者的方法(澄清你的意思).
小智 58
在Java中调用
System.getProperty("user.dir")
Run Code Online (Sandbox Code Playgroud)
和
new java.io.File(".").getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)
返回当前工作目录.
打电话给
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
Run Code Online (Sandbox Code Playgroud)
返回包含当前类的JAR文件的路径,或者如果直接从文件系统运行,则返回产生当前类的CLASSPATH元素(路径).
例:
您的申请位于
C:\MyJar.jar
Run Code Online (Sandbox Code Playgroud)打开shell(cmd.exe)和cdC:\ test \子目录.
使用该命令启动应用程序java -jar C:\MyJar.jar.
前两个调用返回'C:\ test\subdirectory'; 第三个调用返回'C:\ MyJar.jar'.
从文件系统而不是JAR文件运行时,结果将是生成的类文件的根目录的路径,例如
c:\eclipse\workspaces\YourProject\bin\
Run Code Online (Sandbox Code Playgroud)
该路径不包括生成的类文件的包目录.
获取没有.jar文件名的应用程序目录的完整示例,或者如果直接从文件系统运行,则获取类文件的相应路径(例如,在调试时):
String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationDir.endsWith(".jar"))
{
applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer
Run Code Online (Sandbox Code Playgroud)
Kon*_*lph 22
在.NET(C#,VB,...)中,您可以查询当前Assembly实例Location.但是,这会附加可执行文件的名称.以下代码清理路径(using System.IO和using System.Reflection):
Directory.GetParent(Assembly.GetExecutingAssembly().Location)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用提供的信息AppDomain来搜索引用的程序集:
System.AppDomain.CurrentDomain.BaseDirectory
Run Code Online (Sandbox Code Playgroud)
VB通过My名称空间允许另一个快捷方式
My.Application.Info.DirectoryPath
Run Code Online (Sandbox Code Playgroud)
Objective-C Cocoa(Mac OS X,我不知道iPhone的具体情况):
NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
Run Code Online (Sandbox Code Playgroud)
在Java中,有两种方法来查找应用程序的路径。一是雇用System.getProperty:
System.getProperty("user.dir");
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用java.io.File:
new java.io.File("").getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用反射:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
Run Code Online (Sandbox Code Playgroud)