文章目录
1.java调用外部程序(Runtime.getRuntime().exec)
概述
Runtime.getRuntime().exec 用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。功能和windows“运行”类似。
格式:
Process process = Runtime.getRuntime().exec( ".//p.exe ");
第一行的“.//p.exe”是要执行的程序名,Runtime.getRuntime() 返回当前应用程序的Runtime对象,该对象的 exec() 方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。
Runtime.getRuntime().exec共有六个重载方法:
// 在单独的进程中执行指定的外部可执行程序的启动路径或字符串命令
public Process exec(String command)
// 在单独的进程中执行指定命令和变量
public Process exec(String[] cmdArray)
// 在指定环境的独立进程中执行指定命令和变量
public Process exec(String command, String[] envp)
// 在指定环境的独立进程中执行指定的命令和变量
public Process exec(String[] cmdArray, String[] envp)
// 在指定环境和工作目录的独立进程中执行指定的字符串命令
public Process exec(String command, String[] envp, File dir)
// 在指定环境和工作目录的独立进程中执行指定的命令和变量
public Process exec(String[] cmdarray, String[] envp, File dir)
// 参数说明:
cmdarray // 包含所调用命令及其参数的数组。数组第一个元素是命令,其余是参数
envp // 字符串数组,其中每个元素的环境变量的设置格式为 name=value,如果子进程应该继承当前进程的环境,则该参数为null
dir // 子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为null
// 参数cmdArray 示例:shutdown -s -t 3600
String arr[] = {"shutdown","-s","-t","3600"};
Process process = Runtime.getRuntime().exec(arr[]);
/*
注意:
在调用这个方法时,不能将命令和参数放在一起,eg:String arr[] = {"shutdown -s -t 3600"};
这样会导致程序把“shutdown -s -t 3600”当成是一条命令的名称,然后去查找“shutdown -s -t 3600”这条命令,它当然会找不到,所以就会报错
*/
2.cmd shutdown命令
一段时间后关机:
shutdown -s -t 秒数
shutdown -s -t 秒数效果是倒计时到该秒数后关机,例如shutdown -s -t 3600就是3600秒后关机,也就是一小时后关机
立即关机命令:
shutdown -p
shutdown -p关闭本地计算机,效果是马上关机,而不进行倒计时
也可以使用shutdown -s -t 0设置0秒后关机,也就是立即关机的意思。
一段时间后重启:
shutdown -r -t 秒数
shutdown -r -t 秒数,效果是倒计时该秒数后重启,例如shutdown -r -t 0倒数0秒后重启,也就是立即重启的意思,如果没有加-t参数则会倒计时默认的秒数后关机,一般是一分钟。
休眠命令:
shutdown -h
shutdown -h,这条指令让计算机休眠,也就是完全断电,但是会保存当前电脑的状态,下次启动时这些打开过的程序都还在。类似虚拟机的挂起功能。
终止系统关闭
shutdown -a
shutdown -a这条指令可以终止系统关闭,在倒计时还未结束的时候.
shutdown -help 显示所有指令用法
用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
[/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]
没有参数 显示帮助。这与键入 /? 是一样的。
/? 显示帮助。这与不键入任何选项是一样的。
/i 显示图形用户界面(GUI)。
这必须是第一个选项。
/l 注销。这不能与 /m 或 /d 选项一起使用。
/s 关闭计算机。
/sg 关闭计算机。在下一次启动时,
重启任何注册的应用程序。
/r 完全关闭并重启计算机。
/g 完全关闭并重新启动计算机。在重新启动系统后,
重启任何注册的应用程序。
/a 中止系统关闭。
这只能在超时期间使用。
与 /fw 结合使用,以清除任何未完成的至固件的引导。
/p 关闭本地计算机,没有超时或警告。
可以与 /d 和 /f 选项一起使用。
/h 休眠本地计算机。
可以与 /f 选项一起使用。
/hybrid 执行计算机关闭并进行准备以快速启动。
必须与 /s 选项一起使用。
/fw 与关闭选项结合使用,使下次启动转到
固件用户界面。
/e 记录计算机意外关闭的原因。
/o 转到高级启动选项菜单并重新启动计算机。
必须与 /r 选项一起使用。
/m \\computer 指定目标计算机。
/t xxx 将关闭前的超时时间设置为 xxx 秒。
有效范围是 0-315360000 (10 年),默认值为 30。
如果超时时间大于 0,则默示为
/f 参数。
/c "comment" 有关重新启动或关闭的原因的注释。
最多允许 512 个字符。
/f 强制关闭正在运行的应用程序而不事先警告用户。
如果为 /t 参数指定大于 0 的值,
则默示为 /f 参数。
/d [p|u:]xx:yy 提供重新启动或关闭的原因。
p 指示重启或关闭是计划内的。
u 指示原因是用户定义的。
如果未指定 p 也未指定 u,则重新启动或关闭
是计划外的。
xx 是主要原因编号(小于 256 的正整数)。
yy 是次要原因编号(小于 65536 的正整数)。
此计算机上的原因:
(E = 预期 U = 意外 P = 计划内,C = 自定义)
类别 主要 次要 标题
U 0 0 其他(计划外)
E 0 0 其他(计划外)
E P 0 0 其他(计划内)
U 0 5 其他故障: 系统没有反应
E 1 1 硬件: 维护(计划外)
E P 1 1 硬件: 维护(计划内)
E 1 2 硬件: 安装(计划外)
E P 1 2 硬件: 安装(计划内)
E 2 2 操作系统: 恢复(计划外)
E P 2 2 操作系统: 恢复(计划内)
P 2 3 操作系统: 升级(计划内)
E 2 4 操作系统: 重新配置(计划外)
E P 2 4 操作系统: 重新配置(计划内)
P 2 16 操作系统: Service Pack (计划内)
2 17 操作系统: 热修补(计划外)
P 2 17 操作系统: 热修补(计划内)
2 18 操作系统: 安全修补(计划外)
P 2 18 操作系统: 安全修补(计划内)
E 4 1 应用程序: 维护(计划外)
E P 4 1 应用程序: 维护(计划内)
E P 4 2 应用程序: 安装(计划内)
E 4 5 应用程序: 没有反应
E 4 6 应用程序: 不稳定
U 5 15 系统故障: 停止错误
U 5 19 安全问题(计划外)
E 5 19 安全问题(计划外)
E P 5 19 安全问题(计划内)
E 5 20 网络连接丢失(计划外)
U 6 11 电源故障: 电线被拔掉
U 6 12 电源故障: 环境
P 7 0 旧版 API 关机
参考: cmd shutdown命令:关机,重启,休眠
java调用外部程序(Runtime.getRuntime().exec)详解
3.课堂代码展示
import java.io.IOException;
public class Hello {
public static void main(String[] args) throws IOException{
//编写一个自动关机的程序
/*Runtime.getRuntime().exec("shutdown -s -t 3600");
System.out.println("您的电脑即将自动关机!");
*/
/**
* public :关键字 表示公有的,权限修饰符
* class : java中的关键字,用来修饰一个类
* Hello : 是类名
*/
/**
* static : 关键字 表示静态的
* void : 关键字 表示没有返回值类型
* main : 表示主方法名 是Java程序的入口
* (String[] args) : 表示形参变量 String类型的数组 args 是形参变量名
*/
Process process = Runtime.getRuntime().exec("shutdown -a");
System.out.println("家人,你的电脑即将取消自动关机!");
}
}
public class Hello {
/**
* public :关键字 表示公有的,权限修饰符
* class : java中的关键字,用来修饰一个类
* Hello : 是类名
*/
public static void main(String[] args) {
/**
* static : 关键字 表示静态的
* void : 关键字 表示没有返回值类型
* main : 表示主方法名 是Java程序的入口
* (String[] args) : 表示形参变量 String类型的数组 args 是形参变量名
*/
System.out.println("姓名:lll");
System.out.println("专业:软件工程");
System.out.println("座右铭:好好学习,天天向上");
}
}
public class VariableDemo01 {
public static void main(String[] args){
//1.变量在使用之前必须先声明
//System.out.println("age = " + age );
//2.变量在使用之前必须先初始化
//int age
//System.oout.println("age" + age):
//3.变量不能够重复定义
int age = 20;
System.out.println("age =" + age);
}
}
//标识符的命名规范
public class VariableDemo02 {
public static void main(String[] args) {
//1.由数字、字母、下划线、$组成,其中数字不能开头
int number = 13;
//2.长度没有限制,但不宜过长
//3.不能使用Java中的关键字和保留字
//4.尽量做到见名知意,支持中文,但不推荐
String userName = "好好好";
//String 姓名 = "lll";
System.out.println(userName);
}
}