在windows环境下,java程序调用awk不成功,切乱码 。

来源:互联网 发布:mysql 添加外键约束 编辑:程序博客网 时间:2024/06/06 05:17
@Test
public  void testawk() throws IOException, InterruptedException {
String awk="awk \"{$1=0;print $0}\" c:\\awktest.txt>c:\\awktest1.txt";
System.out.println(awk);
Process ps = Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", awk });
// Process ps = Runtime.getRuntime().exec("C:\\awk.bat");
InputStream inputStream = ps.getInputStream();
InputStream errorStream = ps.getErrorStream();
System.out.println(inputStream);
System.out.println(errorStream);

Reader reader = new InputStreamReader(errorStream,"GBK");
BufferedReader bf = new BufferedReader(reader);
String line = null;
        while((line=bf.readLine())!=null){
        System.out.println("----------");
        System.out.println(line);
        }
        int waitFor = ps.waitFor();
        System.out.println("---返回的waitfor---"+waitFor);
        
        InputStreamReader inputStr = new InputStreamReader(ps.getInputStream());  
        BufferedReader br = new BufferedReader(inputStr);  
        String temp = "";  
        System.out.println("----输入流-----");
        while((temp = br.readLine())!= null){  
        System.out.println(temp);  
        }  
          
        ps.destroy();  
        br.close();  
        inputStr.close();  

}


首先解决乱码,我在用Reader reader = new InputStreamReader(errorStream,"GBK");这样,报的错误就解决,显示正常了。错误是:‘awk’ 无法识别.......,我配置环境变量,类似于陪jdk的环境变量,我只是配了path,值为我awk.exe文件所在的路径。用cmd命令执行在c:,d:,f:都能正常执行awk指令。

但是用程序执行就报错。我明明陪环境变量了,并且成功,为啥还报awk未知程序。不解

后来同事解决乱码问题时,将window》priferences中的编码换为gbk(我原来自己改的utf-8),重新执行成功。

我有重新换成utf-8现在也可以了。真不知道是什么原因。


同事是看了个帖子(出现awk中文无法显示的原因是由于我的awk脚本的编码问题,我是在window下生成awk脚本, 所以编码不是unicode。所以等到在linux下echo中文的语句,字符编码自然不是utf-8,在终端显示为乱码。(我的终端是默认utf-8编码显示的))然后改的编码。我是直接改的输入流编码。


后来也遇到过这个问题,发现重启电脑后可以啦,难道有缓存问题。

知道原因的大神,给说说原因