gpt4 book ai didi

Java 运行时 exec() 和 mysqldump

转载 作者:行者123 更新时间:2023-11-29 19:15:25 28 4
gpt4 key购买 nike

当我运行 mysqldump 时,我对运行时的 exec() 方法的行为有点好奇。我正在运行以下命令:

mysqldump --user=root --hex-blob [database name] -r [path to sql file]

我想知道的是,运行时在哪里搜索程序mysqldump.exe?

我发现有些人在使用运行时执行 mysqldump.exe 时提供了它的整个文件路径。为什么是这样?

我之所以好奇是因为我有两种情况:

  1. 在一台 Windows 计算机上,如果我打开运行并输入“cmd”,它将打开一个命令窗口,默认位置为 C:/。在 native 上运行 mysqldump 命令可以正常工作。
  2. 在另一台 Windows 计算机上,如果我打开运行并输入“cmd”,它将打开一个命令窗口,默认位置为 H:/。在此计算机上运行 mysqldump 命令失败。 Java 运行时找不到文件 mysqldump.exe。

两台 Windows 机器是否有可能具有不同的默认驱动器,如果我不提供 mysqldump.exe 的完整路径,系统将在默认驱动器中查找?

提前致谢!

最佳答案

documentation 中所述:

Starting an operating system process is highly system-dependent. Among the many things that can go wrong are:

  • The operating system program file was not found.
  • Access to the program file was denied
  • The working directory does not exist.

我建议以 ProcessBuilder 开头,类似:

 ProcessBuilder pb = new ProcessBuilder("mysqldump ...");
Map<String, String> env = pb.environment();
env.put("PATH", env.get("PATH") + ";Path/to/mysqldump");
try {
Process process = pb.start();
//some code
} catch(IOException e){
}

这样可以确保环境变量设置正确。

关于Java 运行时 exec() 和 mysqldump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com