【发布时间】:2011-07-10 10:41:47
【问题描述】:
我创建了一个 Java 程序,它将使用 C++ 程序处理文件。这是调用C++程序的部分代码:
公共静态布尔 buildPAKFile(字符串 OSMFile){ log("开始为 " + OSMFile + "..." 构建 PAK 文件); // 获取 OSMFile 的名称 String[] OSMFileName = OSMFile.split("\\."); 尝试 { 运行时 rt = Runtime.getRuntime(); 进程 pr = rt.exec("cat " + OSMFile + " | ../gosmore rebuild " + OSMFileName[0]); /* BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 字符串行=空; while((line=input.readLine()) != null) { System.out.println(line); }*/ int exitVal = pr.waitFor(); System.out.println("退出,错误码"+exitVal); } 捕捉(异常 e){ System.out.println(e.toString()); e.printStackTrace(); } log("完成为 " + OSMFile 构建 PAK 文件); 返回真; }当我取消注释从 C++ 程序打印输入流的部分时,出现乱码文本。我怎样才能正确地做到这一点?谢谢!
添加:
这是执行命令的示例:
猫 ncr-sample.osm | ../gosmore 重建 ncr-sample.pak 使用样式 /usr/local/share/gosmore/elemstyles.xml 构建 ncr-sample.pak... ../gosmore 属于公共领域,不提供任何担保 ... 484 for (pairs = 0; pairs【问题讨论】:
-
try:
PrintStream out = new PrintStream(System.out, true, "UTF-8"); out.println(line);这将强制编码为 UTF-8.. 你也可以尝试不同的编码。 -
在 Java 代码之外运行 C++ 程序会输出什么?
-
@Matt 完整的命令是“cat file.osm | ../gosmore rebuild file.pak”。此命令将内容传递给“gosmore”应用程序,该应用程序依次重建它(“rebuild”参数)以形成一个名为 file.pak 的 PAK 文件。
-
...但是执行时输出(特别是到标准输出)是什么?
-
@Matt 它打印 c++ 程序的正在进行的进程。之后,生成 PAK 文件。
标签: java c++ linux command-line