使用Runtime.getRuntime()。exec方法调用exe时出错,如果exe路径有非英语字符

时间:2010-11-05 11:03:41

标签: java runtime.exec

我正在使用Runtime.getRuntime.exec()方法来调用exe。我用这种方法面临的问题是当我传递一些exe路径(c:\ JPN_char_folder \ mypath \ myexe.exe)和其他语言字符(ex.Japanese)时“它说”系统找不到指定的文件“。你能提出一些想法来解决这个问题吗?我甚至尝试在转换为UTF-8后尝试传递这个exe路径,但我仍然无法解决这个问题。

- 罗伯特。

3 个答案:

答案 0 :(得分:0)

我不认为日文字符是问题;这是c:驱动器。

你需要这样写:

String path = "c:\\\JPN_char_folder\\mypath\\myexe.exe";

看看是否有帮助。

答案 1 :(得分:0)

很可能你某处有编码问题。

此处有几个步骤:路径值:

  • InstallAnywhere检索路径
  • InstallAnywhere将其放入变量
  • Java读取变量
  • Java将其放入String
  • Java从String
  • 创建java.io.File实例
  • Java运行时将路径(通过文件)传递给OS

沿着这个序列,路径出了问题: - (。

很难分辨到哪里;你最好的选择可能是尝试在路径的每一步打印出值,看看它出错的地方。

至少从Java内部,您应该将字符串打印为文本,并打印出Unicode代码点列表(使用String.codePointAt)。这样你就可以看到Java使用的真实数据。

另一种方法:

  • 打印出Java从InstallAnywhere获取的值(作为文本和代码点,如上所述)
  • 尝试将路径作为String文字放入Java程序中,然后小动,直到您可以通过这种方式打开文件。然后打印那个字符串。

现在你可以比较两个结果;这应该会让你知道路径搞砸了。 注意:

路径是否包含Basic Multilingual Plane(BMP)之外的字符? Java处理这些有点笨拙,所以你需要特别注意。也许你可以先检查一下。

答案 2 :(得分:0)

即使您使用的是Windows,也可以在指定目录时使用斜杠。这将帮助你逃避反斜杠地狱。

例如,在我的系统上,7z位于目录c:\Program Files\7-Zip\

执行此

File file = new File("c:/Program Files/7-Zip/7z.exe");

if(file.exists()) {
    System.out.println(file.getAbsolutePath());
}

结果

c:\Program Files\7-Zip\7z.exe

在控制台上打印。

我建议你尝试使用这个习惯用法,即在尝试执行之前检查.exe文件是否退出。