2

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

-罗伯特。

4

3 回答 3

0

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

你需要这样写:

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

看看是否有帮助。

于 2010-11-05T11:08:21.423 回答
0

很可能您在某个地方遇到了编码问题。

路径值在这里有几个步骤:

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

沿着这个顺序有些地方出了点问题:-(。

很难说在哪里;您最好的选择可能是尝试在路径的每一步打印出值,看看哪里出错了。

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

另一种方法:

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

现在您可以比较两个结果;这应该让你知道路径在哪里搞砸了。笔记:

路径是否包含基本多语言平面 (BMP) 之外的字符?Java 处理这些有点笨拙,因此您需要格外注意。也许你可以先检查一下。

于 2010-11-05T11:35:53.060 回答
0

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

例如,在我的系统上,7z位于 directory 中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 文件是否存在。

于 2010-11-08T12:38:35.473 回答