- 浏览: 1252075 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- 心情故事 (12)
- java (115)
- linux (55)
- 关系型数据库 (35)
- struts,jsf,spring (11)
- jdbc,hibernate,ibatis (11)
- jsp,jstl,c:tag,标签库 (2)
- ejb,webservice (1)
- tomcat,jboss,jetty,weblogic,websphere (15)
- java网络编程 (6)
- java线程 (0)
- js,jquery,json,xml,dom,html.regex (25)
- 设计模式 (6)
- BUG记录 (2)
- ant (2)
- jsp,servlet (4)
- swing (6)
- lucene+nutch (6)
- log4j (2)
- windows doc (2)
- ruby (1)
- ruby on rails (3)
- 操作系统网络 (18)
- apache 错误 (1)
- tomcat (10)
- jboss (9)
- jetty (9)
- weblogic (9)
- websphere (10)
- apache (2)
- AIX的iostat命令查看系统磁盘的使用情况 (1)
- oracle 统计一个表格有多少列 (1)
- Exception in thread "main" java.security.KeyStoreException: Windows-MY not found (1)
- jsp (1)
- jstl (1)
- c:tag (1)
- 标签库 (1)
- struts (1)
- jsf (1)
- spring (2)
- oracle,sqlplus (2)
- sqlplus (2)
- show errors (1)
- proc (1)
- function (1)
- ORA-06544: PL/SQL: internal error (1)
- arguments: [55916] (1)
- [] (7)
- 终端身份实施文档 (1)
- 重装系统之后飞鸽传书只能看到自己 (1)
- vsftp "上传 553 Could not create file" (1)
- startWebLogic.sh启动失败,提示Error initializing Embedded LDAP Server (1)
- java agent 注册为 windows 服务 (1)
- centos (1)
- svn (1)
- apr (1)
- apr-util (1)
- activemq (2)
- oracle (5)
- mysql (3)
- nosql (3)
- NSIS (1)
- windows wmic (1)
- c 指针 (1)
- c c++ (0)
- jmeter (0)
- 性能测试 (0)
- linux,备份 (2)
- C++ ,Virtual (1)
- windows dos (1)
- android (2)
- 大数据,云计算 (1)
- JVM垃圾收集 (1)
- jdbc (2)
- invoke (1)
- hibernate (1)
- ibatis (1)
- 个人开源项目源码收藏 (1)
- 批处理 (1)
- Mongodb mapreduce (8)
- kettle (1)
- Mongodb capped (1)
- mongodb gridfs (1)
- Mongodb 入门基础知识 (1)
- mongodb (8)
- hadoop2.5.1 (1)
- hadoop (4)
- eclipse (1)
- hdfs fs (1)
- elipse hadoop plugin (1)
- PHP相关知识 (1)
- js (1)
- jquery (1)
- json (1)
- xml (1)
- dom (1)
- html.regex (1)
- 网络知识 (1)
- nginx (1)
- docker (1)
- 测试 (1)
- nodejs (1)
- iptables (1)
- linux gitlab (1)
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
web页面调用window.print()函数实现打印的功能 -
hxdtech:
非常感谢!
我在学习ibatis时的培训ppt -
zmwxiaoming:
what 能连数据库不错
SOLR的学习整理 -
springdata_springmvc:
java程序语言学习教程 地址http://www.zuida ...
java获取当前操作系统的信息 -
huanzei:
整理的不错,
oracle lpad函数
java 与外部进程通信。 由于java 是跨平台的,有时候我们需要用到操作系统的一些信息,为了方便期间,干脆就直接调用操作系统的命令来实现,比如查看IP地址,MAC地址等。不过两个在jdk6里面已经有了,不过以前都是用调用dos 命令,然后获取输出的办法来做的,比如:
import java.io.*; public class DT { public static void main(String[] args) throws IOException { String command="ipconfig"; Runtime r=Runtime.getRuntime(); Process p=r.exec(command); BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); StringBuffer sb=new StringBuffer(); String inline; while(null!=(inline=br.readLine())){ sb.append(inline).append("\n"); } System.out.println(sb.toString()); } }
这样的话可以得到如下的结果:
Windows IP Configuration Ethernet adapter VMware Network Adapter VMnet8: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.79.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : Ethernet adapter VMware Network Adapter VMnet1: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.23.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : Ethernet adapter 本地连接: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.100.12 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.100.250
然而,当我在执行wmic 命令的时候,想要获取它的输出确不行了,看代码:
package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ManagerArgs { public static void main(String[] args) { try { Process p = Runtime.getRuntime().exec("cmd.exe /c wmic process get name,executablepath"); BufferedReader br = new BufferedReader(new InputStreamReader(p .getInputStream())); String line = ""; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
程序在执行的时候就柱塞 了,根本获取不到想ipconfig 那样的结果,把命令放到DOS 命令里面取执行,看图片:
这里确实可以的。难道wmic 命令的结果java 就取不到了吗?同样的都是dos 命令,为啥就有这样的区别呢?大家发表下自己的看法?谢谢!
评论
28 楼
xiaohuafyle
2012-05-28
这个帖子回答了这个问题.
http://blog.csdn.net/ragic/article/details/5583164
http://blog.csdn.net/ragic/article/details/5583164
27 楼
mallon
2009-09-25
今天也发现了这了问题,没想到GOOGLE一下子就搜到了这里,呵呵
26 楼
liusu
2009-07-09
那估计是在win7下这个命令做过优化,刚刚在xp下试了一下,确实不行。
25 楼
chenhua_1984
2009-07-02
liusu 写道
package com.liusu.io; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DT { public static void main(String[] args) throws IOException { String command = "wmic process get name,executablepath"; Runtime r = Runtime.getRuntime(); Process p = r.exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(p .getInputStream())); StringBuffer sb = new StringBuffer(); String inline; while (null != (inline = br.readLine())) { sb.append(inline).append("\n"); } System.out.println(sb.toString()); } }
我就用这个代码,可以得到正确输出。 系统是Win7 RC
其实如果是“阻塞”的,直接在Process p = r.exec(command);之后加一句p.waitFor()就可以了吧。只要不要一直阻塞死了不回来就可以了
我win7上面没有试过!也许Win7优化过吧!我用的是XP,关于p.waitFor(),这个我试过了,不行XP上!
24 楼
liusu
2009-07-01
package com.liusu.io; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class DT { public static void main(String[] args) throws IOException { String command = "wmic process get name,executablepath"; Runtime r = Runtime.getRuntime(); Process p = r.exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(p .getInputStream())); StringBuffer sb = new StringBuffer(); String inline; while (null != (inline = br.readLine())) { sb.append(inline).append("\n"); } System.out.println(sb.toString()); } }
我就用这个代码,可以得到正确输出。 系统是Win7 RC
其实如果是“阻塞”的,直接在Process p = r.exec(command);之后加一句p.waitFor()就可以了吧。只要不要一直阻塞死了不回来就可以了
23 楼
ray_linn
2009-07-01
为什么不直接用javacom ? wmi也是以com的形式提供的
22 楼
px96004
2009-07-01
真的支持一下。非常期待JAVA直接执行命令。
JAVA完不成的还可以用C去写一个EXE来完成。
JAVA完不成的还可以用C去写一个EXE来完成。
21 楼
chenhua_1984
2009-07-01
phoenix520 写道
windows2003下面没有wmic这个命令?
试过的,有!先输入wmic 会提示安装!目前在2000,XP,2003都试过
20 楼
phoenix520
2009-07-01
windows2003下面没有wmic这个命令?
19 楼
mycigar
2009-07-01
之前也遇到过这个问题,当时也是用wmic这个命令,发现必须要关闭InputStream和OutputStream,原因不详。不过我感觉wmic这个命令应该是和普通的dos命令不一样的,具体哪不一样,不知道了。
18 楼
chenhua_1984
2009-07-01
cats_tiger 写道
要用多线程读取输出,另外ProcessBuilder可以合并错误流和正常流,你可以试试。到google查一下“java runtime exec 挂起”也可以找到正确答案。当然,最好的答案在《Java谜题》的82题中。
有的人说是缓冲区太小,装不下结果,有的人说是没有flush和close!
17 楼
cats_tiger
2009-06-30
要用多线程读取输出,另外ProcessBuilder可以合并错误流和正常流,你可以试试。到google查一下“java runtime exec 挂起”也可以找到正确答案。当然,最好的答案在《Java谜题》的82题中。
16 楼
chenhua_1984
2009-06-30
mymGrubby 写道
wmic 类似 ftp dos命令不会自动关闭输入流,
ipconfig 这类命令会自动关闭??
这个原因??????????
ipconfig 这类命令会自动关闭??
这个原因??????????
我怀疑也是!
15 楼
mymGrubby
2009-06-30
wmic 类似 ftp dos命令不会自动关闭输入流,
ipconfig 这类命令会自动关闭??
这个原因??????????
ipconfig 这类命令会自动关闭??
这个原因??????????
14 楼
oxromantic
2009-06-30
和OutputStream 没有任何关系,请不要参考InputStream.available()
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; public class CallDoc { public static void main(String[] args) throws IOException { Process p = Runtime.getRuntime().exec( new String[] { "wmic", "process", "get", "name" }); InputStream input = p.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte buff[] = new byte[1024]; int len = 0; while ((len = input.read(buff)) != -1) { bos.write(buff, 0, len); } input.close(); System.out.println(bos.toString()); } }
13 楼
chenhua_1984
2009-06-30
hintcnuie 写道
是不是应该考虑下apache common下的exec 工具?
这个需要额外的jar包的!
12 楼
whaosoft
2009-06-30
这是没注意过这个~!
11 楼
hintcnuie
2009-06-30
是不是应该考虑下apache common下的exec 工具?
10 楼
chenhua_1984
2009-06-30
myworkfirst 写道
虽然命令执行了,但InputStream流里并没有数据,该对象的内存空间,并没有取到任何数据。
InputStream 默认给了8192个byte,read(byte[]) 里,走不进去,看了jdk源码,没有找到InputStream 里是为空数据原因。
再跟踪下jdk源码,看看是否知道原因
InputStream 默认给了8192个byte,read(byte[]) 里,走不进去,看了jdk源码,没有找到InputStream 里是为空数据原因。
再跟踪下jdk源码,看看是否知道原因
说的有道理,但是为什么有的命令确不需要flush,close就可以取到呢?比如 :
cmd.exe /c ipconfig /all
这个命令不需要就可以得到结果。是不是windows的命令不同内部的处理机制也不同呢?
9 楼
myworkfirst
2009-06-30
虽然命令执行了,但InputStream流里并没有数据,该对象的内存空间,并没有取到任何数据。
InputStream 默认给了8192个byte,read(byte[]) 里,走不进去,看了jdk源码,没有找到InputStream 里是为空数据原因。
再跟踪下jdk源码,看看是否知道原因
InputStream 默认给了8192个byte,read(byte[]) 里,走不进去,看了jdk源码,没有找到InputStream 里是为空数据原因。
再跟踪下jdk源码,看看是否知道原因
相关推荐
标题中的“用于Wmic命令行无效情况下的补丁”指的是针对Windows Management Instrumentation Command-line (WMIC)工具在Windows 7或Windows Server 2008系统上出现故障或无法正常工作时,需要应用的修复程序。WMIC是...
WMIC-Java 可以执行 WMIC 和命令行参数。 需要适当的 GUI 和需要管理员权限的工作命令。 由一个主方法和来自 3 ... 可以使用 WMIC 收集来自计算机的许多有用信息,因此我认为看看 java 是否可以执行这些命令会很有趣。
WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批命令脚本执行系统管理的支持。非常好用命令,这个脚本用于修复wmic不能使用的问题
WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具) ,提供了从命令行接口和批命令脚本执行系统管理的支持。非常好用命令,这个脚本用于修复wmic不能使用的问题
### Java调用外部程序命令详解 #### 一、引言 在进行系统集成或自动化脚本编写时,经常需要从Java程序中调用外部程序或命令。这种需求常见于多种场景,例如远程服务管理、批处理操作等。本文将详细介绍如何使用...
- `wmic process where "name='explorer.exe' and executablepath<>'%SystemDrive%\\windows\\explorer.exe'" delete`:结束非系统目录下的`explorer.exe`进程。 8. **内存和文件信息**: - `wmic memlogical get...
在现代Windows版本中,很多DOS命令被Windows命令行工具(PowerShell或CMD)所继承,如`wmic`用于Windows Management Instrumentation Command-line,允许更高级的系统管理和脚本编写。此外,还有一些命令是Windows...
### WMIC命令详解 #### 背景与概念 WMIC(Windows Management Instrumentation Command-line)作为微软在Windows Server 2003中推出的一种全新的命令行管理工具,结合了WMI的强大功能与命令行的简洁特性。对于那些...
### 计算机常用DOS命令详解 在计算机操作系统中,DOS(Disk Operating System)命令行界面是一种非常实用的工具,它可以帮助用户执行各种管理任务。本文将详细介绍一系列常用的DOS命令及其功能,帮助您更好地理解和...
【DOS命令中的COPY详解】 COPY是DOS操作系统中用于文件复制的一个基本命令,它的主要功能是将源文件复制到目标位置,创建一个与源文件内容完全相同的副本。COPY命令适用于简单文件复制,而在需要更高级选项如递归...
### Windows系统下启动与结束Java的JAR包的脚本(包括如何设置进程名称) 在Windows环境下管理和控制Java应用程序的启动与停止是一项常见的任务。本文将详细介绍如何编写一个批处理脚本来实现这些功能,并且还会...
描述:"wmic超实用 dos学习必看,全面了解操作系统" 知识点: ### 一、WMIC基础概念 **WMIC(Windows Management Instrumentation Command-line)**是一种强大的命令行工具,用于管理和访问Windows管理信息库...
wmic 实例是一种强大的命令行工具,用于管理和监控 Windows 操作系统的各种资源。下面是 wmic 实例在磁盘管理、系统服务管理和进程管理等方面的应用。 磁盘管理 wmic 实例可以用于查看磁盘的属性,例如磁盘的标题...
WMIC,全称为Windows Management Instrumentation Command Line,是Windows操作系统中的一个强大工具,它扩展了Windows Management Instrumentation(WMI)的功能,允许用户通过命令行界面执行系统管理和监控任务。...
这只是DOS命令大全中的一部分,每个命令都有其特定的用途和用法,熟练掌握这些命令可以极大地提高在命令行环境下的工作效率。了解并运用这些命令,无论是进行系统维护、文件管理还是自动化任务,都能得心应手。
WMIC通常位于Windows系统的特定目录下,并且其路径被包含在系统的PATH环境变量中,这意味着用户可以在任何命令提示符窗口中直接调用`wmic`命令。具体而言,在不同版本的Windows操作系统中,WMIC的默认位置如下: - ...