有没有办法获取正在运行的java程序的主类的路径.
结构是
D:/
|---Project
|------bin
|------src
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的道路D:\Project\bin\.
我试过System.getProperty("java.class.path");但问题是,如果我跑的话
java -classpath D:\Project\bin;D:\Project\src\ Main
Output
Getting : D:\Project\bin;D:\Project\src\
Want : D:\Project\bin
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
=====编辑=====
得到了解决这里
package foo;
public class Test
{
public static void main(String[] args)
{
ClassLoader loader = Test.class.getClassLoader();
System.out.println(loader.getResource("foo/Test.class"));
}
}
Run Code Online (Sandbox Code Playgroud)
打印出来的:
file:/C:/Users/Jon/Test/foo/Test.class
Run Code Online (Sandbox Code Playgroud)
解决方案2(由 Erickson提供)
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());
Run Code Online (Sandbox Code Playgroud)
请注意,大多数类文件都组装成JAR文件,因此在每种情况下都不起作用(因此IllegalStateException).但是,您可以使用此技术找到包含该类的JAR,并且您可以通过替换调用代替来获取类文件的内容,无论该类是在文件系统上还是在JAR getResourceAsStream()中getResource(),这都将起作用.
Ren*_*ink 120
使用
System.getProperty("java.class.path")
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
您也可以轻松地将其拆分为元素
String classpath = System.getProperty("java.class.path");
String[] classpathEntries = classpath.split(File.pathSeparator);
Run Code Online (Sandbox Code Playgroud)
Jun*_*san 79
试试这段代码:
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
Run Code Online (Sandbox Code Playgroud)
用MyClass包含main方法的类替换' '.
或者你也可以使用
System.getProperty("java.class.path")
Run Code Online (Sandbox Code Playgroud)
上面提到的System属性提供
用于查找包含类文件的目录和JAR存档的路径.类路径的元素由path.separator属性中指定的特定于平台的字符分隔.
Ale*_*exR 21
您实际上不希望获得主类的路径.根据您的示例,您希望获取当前工作目录,即程序启动的目录.在这种情况下,你可以说new File(".").getAbsolutePath()
| 归档时间: |
|
| 查看次数: |
256495 次 |
| 最近记录: |