我有一个正在运行的外部程序。出于某种原因,代码所有者没有给我代码或良好的文档,我知道如何运行此代码,但它最初是为了从命令行而不是从 JAVA 执行而编写的。对我的影响是该应用程序使用 ENV 变量并根据其值(计算机上的输出路径)进行中继。我想更改该值,如何在不从批处理文件中运行它的情况下完成?
4 回答
我假设您正在使用 Java 代码中的Runtime .exec() 方法之一执行该程序以创建Process。
请注意,其中一些方法允许您将环境变量传递给正在创建的进程,例如exec(String[] cmd, String[] envp)。
或者,可以操作ProcessBuilder.environment()返回的 Map以获得相同的效果。
看到这个帖子。在发布问题之前先在这里开始搜索通常会有所帮助。如果您已经尝试过该解决方案,它确实有助于帮助者让他们知道您尝试过并且出了什么问题。
在您的命令提示符中首先设置所需的变量
set FILELOCATION=<PATH TO FILE>
java MyProgram
在这种情况下,在FILELOCATION
您关闭程序之前将一直可用。
不设置变量将取决于操作系统。
对于 Linux 或 Solaris,您可以:
export FILELOCATION=<PATH TO FILE>
如果您正在寻找命令行参数,那么您可以使用以下内容:
java MyProgram PathToFile
有更好的方法来做到这一点java -DFILELOCATION=<PATH_TO_FILE> MyProgram
编辑:根据评论。
只需使用ProcessBuilder在 Java 代码中设置 ENV 变量。
如何在不从批处理文件运行的情况下完成
只需设置全局环境变量。所有新进程都会看到它(不包括那些从旧父进程继承环境的进程)。
另请参阅如何从 Java 设置环境变量?. 这回答了问题的标题。顺便说一句,这与问题的主体不匹配。;)