如何在执行java可执行文件(.exe)时获取CMD的目录

如何在执行java可执行文件(.exe)时获取CMD的目录,java,Java,如何从已导出并转换为.exe文件的java文件中找到CMD当前所在的当前目录 我不是在寻找当前的工作目录,因为它只获取.exe文件的位置 System.getProperty(“user.dir”)不是我要找的。 与新文件相同(“.”) 如果cmd是C:Users/User/Desktop,然后我调用file.exe,我想知道路径C:Users/User/Desktop,而不是file.exe的目录 我通过:(使用Eclipse)将Main.java文件转换为.exe 将s File.Jar导出

如何从已导出并转换为.exe文件的java文件中找到CMD当前所在的当前目录

我不是在寻找当前的工作目录,因为它只获取.exe文件的位置

System.getProperty(“user.dir”)
不是我要找的。 与新文件相同(“.”)

如果cmd是
C:Users/User/Desktop
,然后我调用
file.exe
,我想知道路径
C:Users/User/Desktop
,而不是
file.exe
的目录

我通过:(使用Eclipse)将Main.java文件转换为.exe 将s File.Jar导出为可运行的Jar文件

Launch4j-Outputfile=file.exe-Jar runtime path=Jars/file.Jar-不要包装Jar,只启动

这应该可以工作:

import java.util.*;
import java.lang.*;

public class GetExePath
{
  public static void main(String args[]) {
    try{
      String exePath = System.getProperty("user.dir");
      System.out.print("exe path at ="+exePath .replace("\\", "/"));
    }catch (Exception e){
      System.out.println("Some Exception ="+e.getMessage());
    }
  }
}
输出:

D:\vinay_hegde\javaexample>javac GetExePath.jav

D:\vinay_hegde\javaexample>java GetExePath
exe path at = D:\vinay_hegde\javaexample
如前所述,您将使用:

System.getProperty(“user.dir”);
它将为您提供用户工作目录

输出为:

C:\Foo> java -jar bar\baz.jar
Directory: C:\Foo
因为这不适用于您,所以问题必须来自Launch4J

当你开始启动4j时,在选项Basic->Change Dir上有一个小点,移除它,你会很高兴的

以下是我的Launch4J配置,仅供参考:

<?xml version="1.0" encoding="UTF-8"?>
<launch4jConfig>
  <dontWrapJar>false</dontWrapJar>
  <headerType>console</headerType>
  <jar>C:\Foo\bar\baz.jar</jar>
  <outfile>C:\Foo\bar\baz.exe</outfile>
  <errTitle></errTitle>
  <cmdLine></cmdLine>
  <chdir></chdir>
  <priority>normal</priority>
  <downloadUrl>http://java.com/download</downloadUrl>
  <supportUrl></supportUrl>
  <stayAlive>false</stayAlive>
  <restartOnCrash>false</restartOnCrash>
  <manifest></manifest>
  <icon></icon>
  <jre>
    <path></path>
    <bundledJre64Bit>false</bundledJre64Bit>
    <bundledJreAsFallback>false</bundledJreAsFallback>
    <minVersion>1.6</minVersion>
    <maxVersion></maxVersion>
    <jdkPreference>preferJre</jdkPreference>
    <runtimeBits>64/32</runtimeBits>
  </jre>
</launch4jConfig>

并将此bat包装到exe文件中

这些答案只会告诉我可执行文件的位置,而不是cmd的执行位置;System.out.println(f.getAbsolutePath());它仍然只能从可执行文件所在的目录中获取信息,而不能从cmd执行该文件的目录中获取信息。请参阅答案,我认为转换为.exe文件可能是您遇到问题的原因,因为它可能会更改当前目录,而这正是您获得令人惊讶的结果的原因。如果您使用的是java.jar而不是exe文件,那么获取cmd目录是否会像预期的那样工作?对不起,它提供的是可执行文件的目录,而不是执行文件的cmd目录。嗯,与我得到的不同。也许这就是我再次创建.exe文件的方式,它给出了可执行文件的目录,而不是执行文件时cmd的目录。@Sam也许你的*.exe是你问题的一部分。你可以用jar文件试试。如果你需要一个exe,不要将jar包装在exe中,只需将exe用作启动器(我认为Launch4j有一个选项),你的问题可能会得到解决。好的,我会尝试一下,thxI在不包装的情况下转换它,但我仍然得到.exe文件的目录,而不是cmd当前所在的目录,当我执行.exe文件时,尝试调用jar而不是exe,这样我们可以缩小错误范围。
java -jar bar\baz.jar