Java调用Windows命令

本文介绍如何使用Java调用Windows命令,包括启动应用程序、执行批处理文件及进行文件和目录操作等。通过Runtime类和Process类实现命令的执行与结果读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java调用Windows命令主要用到两个类:
 
java.lang.Runtime
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
 
java.lang.Process
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。 对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程。
 
下面是个简单例子:
  1. package com.lavasoft;
  2. import java.io.IOException;
  3. import java.io.BufferedReader;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. public class TestCmd {
  7.     public static void main(String args[]) {
  8.         testWinCmd();
  9.         dirOpt();
  10.     }
  11.     public static void testWinCmd() {
  12.         System.out.println("------------------testWinCmd()--------------------");
  13.         Runtime runtime = Runtime.getRuntime();
  14.         System.out.println(runtime.totalMemory());
  15.         System.out.println(runtime.freeMemory());
  16.         System.out.println(runtime.maxMemory());
  17.         System.out.println(runtime.availableProcessors());   //处理器数
  18.         try {
  19.             //执行一个exe文件
  20.             runtime.exec("notepad");
  21.             runtime.exec("C://Program Files//Microsoft Office//OFFICE11//winword.exe c://test.doc");
  22.             //执行批处理
  23.             runtime.exec("c://x.bat");
  24.             //执行系统命令
  25.             runtime.exec("cmd /c dir ");
  26.             runtime.exec("cmd /c dir c://");
  27. //            //-------------- 文件操作 --------------
  28.             runtime.exec("cmd /c copy c://x.bat d://x.txt");   //copy并改名
  29.             runtime.exec("cmd /c rename d://x.txt x.txt.bak"); //重命名
  30.             runtime.exec("cmd /c move d://x.txt.bak c://");    //移动
  31.             runtime.exec("cmd /c del c://x.txt.bak");          //删除
  32.             //-------------- 目录操作 --------------
  33.             runtime.exec("cmd /c md c://_test");          //删除
  34.         } catch (IOException e) {
  35.             e.printStackTrace();
  36.         }
  37.     }
  38.     
  39.     public static void dirOpt() {
  40.         System.out.println("------------------dirOpt()--------------------");
  41.         Process process;
  42.         try {
  43.             //执行命令
  44.             process = Runtime.getRuntime().exec("c://x.bat");
  45.             //取得命令结果的输出流
  46.             InputStream fis = process.getInputStream();
  47.             //用一个读输出流类去读
  48.             BufferedReader br = new BufferedReader(new InputStreamReader(fis));
  49.             String line = null;
  50.             //逐行读取输出到控制台
  51.             while ((line = br.readLine()) != null) {
  52.                 System.out.println(line);
  53.             }
  54.         } catch (IOException e) {
  55.             e.printStackTrace();
  56.         }
  57.     }
  58. }
  59. Java调用Windows命令主要用到两个类:
     
    java.lang.Runtime
    每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
     
    java.lang.Process
    ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。 对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程。
     
    下面是个简单例子:
    package com.lavasoft;

    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;


    public class TestCmd {

        public static void main(String args[]) {
            testWinCmd();
            dirOpt();
        }

        public static void testWinCmd() {
            System.out.println("------------------testWinCmd()--------------------");
            Runtime runtime = Runtime.getRuntime();
            System.out.println(runtime.totalMemory());
            System.out.println(runtime.freeMemory());
            System.out.println(runtime.maxMemory());
            System.out.println(runtime.availableProcessors());   //处理器数
            try {
                //执行一个exe文件
                runtime.exec("notepad");
                runtime.exec("C://Program Files//Microsoft Office//OFFICE11//winword.exe c://test.doc");
                //执行批处理
                runtime.exec("c://x.bat");
                //执行系统命令
                runtime.exec("cmd /c dir ");
                runtime.exec("cmd /c dir c://");

    //            //-------------- 文件操作 --------------

                runtime.exec("cmd /c copy c://x.bat d://x.txt");   //copy并改名
                runtime.exec("cmd /c rename d://x.txt x.txt.bak"); //重命名
                runtime.exec("cmd /c move d://x.txt.bak c://");    //移动
                runtime.exec("cmd /c del c://x.txt.bak");          //删除

                //-------------- 目录操作 --------------
                runtime.exec("cmd /c md c://_test");          //删除
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        
        public static void dirOpt() {
            System.out.println("------------------dirOpt()--------------------");
            Process process;
            try {
                //执行命令
                process = Runtime.getRuntime().exec("c://x.bat");
                //取得命令结果的输出流
                InputStream fis = process.getInputStream();
                //用一个读输出流类去读
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                String line = null;
                //逐行读取输出到控制台
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
     
    x.bat
    del c:/del.txt
    cd D:
    dir
    运行结果:
    ------------------testWinCmd()--------------------
    2031616
    1652120
    66650112
    2
    ------------------dirOpt()--------------------

    D:/_dev_stu/fileopt>del c:/del.txt  

    D:/_dev_stu/fileopt>cd D:  
    D:/_dev_stu/fileopt

    D:/_dev_stu/fileopt>dir
    驱动器 D 中的卷是 DISK1_VOL2
    卷的序列号是 70FB-DFAF

    D:/_dev_stu/fileopt 的目录

    2008-07-18  09:30    <DIR>          .
    2008-07-18  09:30    <DIR>          ..
    2008-07-18  09:30    <DIR>          src
    2008-07-18  09:31               549 fileopt.iml
    2008-07-18  09:31            10,292 fileopt.ipr
    2008-07-18  14:27    <DIR>          classes
    2008-07-18  16:42            26,265 fileopt.iws
                   3 个文件         37,106 字节
                   4 个目录  8,095,498,240 可用字节

    Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值