iteye_12606
2009-12-25 12:18
浏览 317
已采纳

java 程序调用Unix/Linux 中的Shell,然后shell中含中文名的问题

各路好手,小弟项目中遇到如下问题,急需各位大侠出手相助,现将问题描述如下:
小弟的项目是用Java开发的,IDE是 Mac OS 下的 Eclipse(Linux/Unix下也是相同的问题)。程序中需调用系统的 shell 命令,例如:

String line;
String[] cmd = new String[3];
cmd[0] = "/bin/sh";
cmd[1] = "-c";
cmd[2] = "du -sh /Users/测试"

Process proc = Runtime.getRuntime.exec(cmd);
InputStreamReader is = new InputStreamReader(proc.getInputStream());
BufferedReader br = new BufferedReader (is);
while ((line = br.readLine ()) != null) {
System.out.println(line);
}

du 命令是用来读取文件大小的shell命令,本程序需要读取“/Users/测试”这个文件夹的大小。现在问题来了,源程序没有经过打包,直接在Eclipse中点击Run按钮,这样是可以直接显示正确结果的,如“123M /Users/测试”这种形式,但是打包成jar包时,shell命令就不识别中文名了,也就无法执行du命令。打开终端,在命令行下键入 “du -sh /Users/测试”也是可以显示正确结果。所以小弟想应该是Shell的环境变量设置有问题。请问,应该如何在程序中设置shell的环境变量,确保打包后的程序能正常调用含中文参数的shell命令。
请各路好手出手相助!
问题补充
To zhoun:
我在命令行执行echo $LANG结果是zh_CN.UTF-8;所以按照你写的执行了一下,结果报“java.io.IOException: LANG=zh_CN.UTF-8: not found”异常。
问题补充:
To Ihavegotyou:
多谢你的回答,呵呵。
不过小弟仅仅是拿 du 命令作为一个例子,使用其他Linux/Unix命令的时候,对于中文参数,还是会面临一样的问题的。
问题补充:
多谢您的回答。目前问题已解决。我将程序拿出来,在命令行下制定字符集进行编译如: javac -encoding UTF-8 test.java 然后运行的时候也是指定相同字符集 java -Dfile.encoding=UTF-8 ... 这样就能正常运行了。所以问题就是,双击可运行jar包时,调用的字符集和原先编译的字符集不一样。
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

相关推荐 更多相似问题