执行java可执行文件(.exe)时如何获取CMD的目录[重复]
Posted
技术标签:
【中文标题】执行java可执行文件(.exe)时如何获取CMD的目录[重复]【英文标题】:How to get the directory of the CMD when I execute a java executable file (.exe) [duplicate] 【发布时间】:2019-12-20 06:46:07 【问题描述】:如何从已导出并转换为 .exe 文件的 java 文件中找到 CMD 当前所在的当前目录。
我不是在寻找当前的工作目录,因为它只会让我知道 .exe 文件的位置。
System.getProperty("user.dir")
不是我想要的。
与 new File(".") 相同
如果cmd是C:Users/User/Desktop
然后我调用file.exe
,我想知道C:Users/User/Desktop
的路径,而不是file.exe
的目录。
我通过以下方式将 Main.java 文件转换为 .exe:(使用 Eclipse) 导出为可运行的 Jar 文件 a s file.jar
Launch4j - 输出文件 = file.exe - Jar 运行时路径 = Jars/file.jar - 不包装 jar,仅启动
【问题讨论】:
这些答案只能让我知道可执行文件的位置,而不是 cmd 的执行位置。 文件 f = new File(""); System.out.println(f.getAbsolutePath()); 它仍然只获取可执行文件所在的目录,而不是 cmd 执行的目录。 查看答案here 我认为转换为 .exe 文件可能是您遇到麻烦的原因,因为它可能会更改当前目录,这就是您会得到令人惊讶结果的原因。如果您使用 java .jar 而不是 exe 文件,那么获取 cmd 目录是否会按预期工作? 【参考方案1】:正如提到的here 你会使用:
System.getProperty("user.dir");
它将为您提供用户工作目录。
输出是:
C:\Foo> java -jar bar\baz.jar
Directory: C:\Foo
因为这对您不起作用,所以问题必须来自 Launch4J。
当您启动 Launch4j 时,Option 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
文件,例如:
java -jar bar\baz.jar
并将这个bat打包成一个exe文件。
【讨论】:
再次,这里给出的是可执行文件的目录,而不是文件执行时cmd的目录。 @Sam 也许你的 *.exe 是你问题的一部分。您可以尝试使用 jar 文件。如果你需要一个exe,不要将jar包在exe中,只需将exe用作启动器(我认为Launch4j有一个选项),你的问题可能会得到解决。 好的,会试试的,谢谢 我在不换行的情况下转换它,但是当我执行.exe文件时,我仍然得到.exe文件的目录,而不是cmd当前所在的目录 尝试调用jar而不是exe,这样我们可以缩小错误范围。【参考方案2】:这应该有效:
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
【讨论】:
对不起,但它给了我可执行文件的目录,而不是执行文件的 cmd 目录。 嗯,与我得到的不同。也许这是我创建 .exe 文件的方式以上是关于执行java可执行文件(.exe)时如何获取CMD的目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章
指定的任务可执行文件“cmd.exe”无法运行。指定的可执行文件不是此操作系统平台的有效应用程序