记录一次简单的Java程序调用Linux命令

在此之前,我在C++环境中,调用过Linux的脚本。不过,也是很久,很久以前了。最近,有这样一个需求,通过Java代码控制压缩文件夹。使用ZipUtil可以轻松实现,但是问题来了,文件夹里面包含了,非法文件名的文件,导致压缩不完整。但这个文件在Linux里面是没有问题的。被迫无奈,只能使用Linux命令进行压缩。那么Java怎么才能调用Linux的命令呢?

众所周知,每一个Java应用程序都有一个Runtime实例,通过这个实例,我们可以实现程序与环境之间相连接。使用getRuntime()方法可以获得到Runtime实例,值得注意的是,Runtime是不能手动创建的。Java使用Process类来表示一个进程。

实现我的需求的方法是:

1、通过Runtime.getRuntime().exec("命令")执行外部的程序。

2、使用上面的执行的返回结果(是一个Process对象),管理上面执行的子进程。

常用的Runtime.getRuntime().exec()方法如下:
  1. exec(String command)
  2. exec(String command, String envp[], File dir)
  3. exec(String cmd, String envp[])
  4. exec(String cmdarray[])
  5. exec(String cmdarray[], String envp[])
  6. exec(String cmdarray[], String envp[], File dir)

一般的应用程序可以直接使用第一版本,当有环境变量传递的时候使用后面的版本。其中2和6版本可以传递一个目录,标识当前目录,因为有些程序是使用相对目录的。

例子:

String[] cmds = { "/bin/sh", "-c",
	        "cd " + file_partent.getAbsolutePath() + 
		" && " + " zip " + " -r " + zipFile.getAbsolutePath() + " " + file_current.getName() + 
		" && " + " cd " + " - " };    //使用cd的目的是为了进到某个目录执行命令
System.out.println("cmds:" + Arrays.toString(cmds));
Process pro = null;
try {
	pro = Runtime.getRuntime().exec(cmds); //执行外部命令,返回子进程对象
	pro.waitFor();   //等待子进程完成
} catch (IOException e) {
	e.printStackTrace();
} catch (InterruptedException e) {
	e.printStackTrace();
}

结论:

执行外部的命令,两个关键类,Runtime类和Process类,主要的方法,getRuntime().exex();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值