当前位置:编程学习 > JAVA >>

java调用DOS,输出的结果被截断

java调用一个DOS命令,和在DOS下输入的内容相比,少了后面一段,请大家分析,给出建议,看代码错在什么地方。在命令行里面输入cmd /c ipconfig/all,中文开始的一段内容被java环境丢掉了。

package javaapplication5;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 *
 * @author
 */
public class JavaApplication5 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
                        String sCmd = "C:\\windows\\system32\\cmd.exe /c ipconfig/all";
try {
Process pro = Runtime.getRuntime().exec(sCmd);
InputStream is = pro.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 读取第一行
String message = br.readLine();

                        while(message !=null){
                            System.out.println(message);
message = br.readLine();
                        }
} catch (IOException e) {
// System.out.println("Can't get mac address!");
}
    }
} --------------------编程问答-------------------- 那就cmd /c ipconfig/all >c:\123.txt 然后读取这个txt什么内容都有 --------------------编程问答-------------------- 不是很明白你问的是什么,代码本身没错。我测试了一下。结果正常啊,


Windows IP 配置

   主机名  . . . . . . . . . . . . . : liu-PC
   主 DNS 后缀 . . . . . . . . . . . : 
   节点类型  . . . . . . . . . . . . : 混合
   IP 路由已启用 . . . . . . . . . . : 否
   WINS 代理已启用 . . . . . . . . . : 否

无线局域网适配器 无线网络连接 2:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Microsoft Virtual WiFi Miniport Adapter
   物理地址. . . . . . . . . . . . . :
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是

以太网适配器 本地连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Qualcomm Atheros AR8151 PCI-E Gigabit Ethernet Controller (NDIS 6.20)
   物理地址. . . . . . . . . . . . . : 10-BF-48-65-28-0B
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是

无线局域网适配器 无线网络连接:

   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Atheros AR9485 Wireless Network Adapter
   物理地址. . . . . . . . . . . . . : 
   DHCP 已启用 . . . . . . . . . . . : 是
   自动配置已启用. . . . . . . . . . : 是
   本地链接 IPv6 地址. . . . . . . . : fe80::a901:a5ba:5a2c:fe3d%11(首选) 
   IPv4 地址 . . . . . . . . . . . . : 192.168.2.100(首选) 
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   获得租约的时间  . . . . . . . . . : 2013年2月23日 19:38:25
   租约过期的时间  . . . . . . . . . : 2013年2月23日 21:38:28
   默认网关. . . . . . . . . . . . . : 192.168.2.1
   DHCP 服务器 . . . . . . . . . . . : 192.168.2.1
   DHCPv6 IAID . . . . . . . . . . . : 239365463
   DHCPv6 客户端 DUID  . . . . . . . : 00-01-00-01-17-AD-7B-E9-44-6D-57-78-C3-7E
   DNS 服务器  . . . . . . . . . . . : 192.168.1.1
                                       192.168.2.1
   TCPIP 上的 NetBIOS  . . . . . . . : 已启用

隧道适配器 6TO4 Adapter:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter
   物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是

隧道适配器 本地连接* 162:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter #148
   物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是

隧道适配器 Reusable Microsoft 6To4 Adapter:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . : 
   描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter #2
   物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是
--------------------编程问答-------------------- 楼主把你的输出贴出来看,可以的话上张图 --------------------编程问答-------------------- --------------------编程问答--------------------
这个是DOS命令行输出,java执行的结果像是碰到输出中文就停止了,或者是缓冲区不够大自动关闭流了? --------------------编程问答-------------------- 你要输出的内容太多了, cmd容不下,就丢弃了前面的了,你可以设置一下你的cmd内容显示长度,不是那个方框的高度哦 --------------------编程问答-------------------- 我用的是WINDOWS XP英文系统,有这个问题。WIN7中文系统倒没发现这个问题,物理地址能读出来的。 --------------------编程问答-------------------- 似乎和汉字有关,一到有汉字的地方,就结束了。 --------------------编程问答-------------------- to #6:
cmd 在DOS下可以输出,在Java中应该也能输出那么多内容才对。 --------------------编程问答-------------------- new InputStreamReader(is,"UTF-8")这里加上字符集试试看 --------------------编程问答-------------------- 没用的,试过了,和没加结果完全一样。 --------------------编程问答-------------------- top toop top --------------------编程问答-------------------- 应该是字符编码的问题
new InputStreamReader(is,"UTF-8")
看看GBK,GB2312可以吗?

在win8中文版下用new InputStreamReader(is,"UTF-8")会显示乱码。 --------------------编程问答-------------------- 都试过了,还是不行,看样子像是buffer不够大,或者是流先关闭了,但不知道为什么。 --------------------编程问答--------------------
引用 14 楼 yakai 的回复:
都试过了,还是不行,看样子像是buffer不够大,或者是流先关闭了,但不知道为什么。

我试了下,也没问题,也是包含汉字的,如果改默认编码为指定编码的话,顶多是原汉字处出现了乱码,但没有截断现象出现。但我觉得和buffer关系应该不大,这点字符容量,根本不值一提。 --------------------编程问答-------------------- 哦,你是通过jar包运行的,在eclipse里直接运行程序呢? --------------------编程问答-------------------- eclipse和DOS,netbeans环境中结果相同。 --------------------编程问答-------------------- 没有问题。不过。编码要改成GBK ,UTF-8是乱码 --------------------编程问答-------------------- 早试过GBK,不行的。 --------------------编程问答-------------------- 帖子快沉了,顶起。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,