一、Java调用Linux系统的命令非常简单

这是一个非常常用的调用方法示例:public String executeLinuxCmd(String cmd) {

System.out.println("got cmd job : " + cmd);

Runtime run = Runtime.getRuntime();

try {

Process process = run.exec(cmd);

InputStream in = process.getInputStream();

BufferedReader bs = new BufferedReader(new InputStreamReader(in));

// System.out.println("[check] now size \n"+bs.readLine());

StringBuffer out = new StringBuffer();

byte[] b = new byte[8192];

for (int n; (n = in.read(b)) != -1;) {

out.append(new String(b, 0, n));

}

System.out.println("job result [" + out.toString() + "]");

in.close();

// process.waitFor();

process.destroy();

return result;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

二、含有管道符(|)多级命令串联查询public List executeLinuxCmd(String cmd) {

System.out.println("got cmd job : " + cmd);

Runtime run = Runtime.getRuntime();

try {

// Process process = run.exec(cmd);

Process process = run.exec(new String[] {"/bin/sh", "-c", cmd});

InputStream in = process.getInputStream();

BufferedReader bs = new BufferedReader(new InputStreamReader(in));

List list = new ArrayList();

String result = null;

while ((result = bs.readLine()) != null) {

System.out.println("job result [" + result + "]");

list.add(result);

}

in.close();

// process.waitFor();

process.destroy();

return list;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

三、含有cd操作的方法示例问题背景

1.1 java程序运行在/home/lings目录下;

1.2 希望删除/home/test目录下的文件proxy.log;

1.3 调用上面的接口两次?executeLinuxCmd("cd /home/test");

executeLinuxCmd("rm -fr /home/proxy.log");

是不行的!

1.4 这个接口的调用是单次事务型的,就是每次调用都是独立的事务或者说操作,没有关联的。

那这种“复杂”一点的操作流程怎么办呢?

1.5 方法a: 可以写一个独立的脚本,然后一次运行脚本,这样多复杂的逻辑都没问题。

1.6 方法b: 可以启动一个shell长连接,保持连接,发送多条命令,最后释放连接。

示例逻辑代码:public void executeNewFlow() {

Runtime run = Runtime.getRuntime();

File wd = new File("/bin");

System.out.println(wd);

Process proc = null;

try {

proc = run.exec("/bin/bash", null, wd);

} catch (IOException e) {

e.printStackTrace();

}

if (proc != null) {

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);

out.println("cd /home/test");

out.println("pwd");

out.println("rm -fr /home/proxy.log");

out.println("exit");//这个命令必须执行,否则in流不结束。

try {

String line;

while ((line = in.readLine()) != null) {

System.out.println(line);

}

proc.waitFor();

in.close();

out.close();

proc.destroy();

} catch (Exception e) {

e.printStackTrace();

}

}

}

三的优化和演进(返回值)public List executeNewFlow(List commands) {

List rspList = new ArrayList();

Runtime run = Runtime.getRuntime();

try {

Process proc = run.exec("/bin/bash", null, null);

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);

for (String line : commands) {

out.println(line);

}

// out.println("cd /home/test");

// out.println("pwd");

// out.println("rm -fr /home/proxy.log");

out.println("exit");// 这个命令必须执行,否则in流不结束。

String rspLine = "";

while ((rspLine = in.readLine()) != null) {

System.out.println(rspLine);

rspList.add(rspLine);

}

proc.waitFor();

in.close();

out.close();

proc.destroy();

} catch (IOException e1) {

e1.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}

return rspList;

}

java 执行cd_Java调用Linux命令(cd的处理)相关推荐

  1. linux下java命令行参数_Java调用Linux命令行

    Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...

  2. java如何调用linux命令_java程序中如何调用linux命令

    java程序中如何调用linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服 ...

  3. java linux root权限管理_Java 执行root 权限linux命令

    打开终端,先以 root 身份登录:su root 然后执行:visudo (visudo编辑sudoers配置文件) 在打开的文件中,找到下面这一行: root ALL=(ALL) ALL 并紧帖其 ...

  4. linux php 执行命令权限不够,PHP调用Linux命令权限不足问题解决方法

    PHP调用Linux命令权限不足问题解决方法 业务背景:  yourcmd为我的linux程序,它对权限要求非常严格,当用php去执行yourcmd程序 系统:CentOS 6.3 apache是ph ...

  5. 安卓程序中调用 linux 命令

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 在研究串口 jni 开发的时候,遇到了这样一段代码: Process su;su = Runtime.getRuntim ...

  6. java版本streamgobbler_java调用本地命令 Runtime class's exec() method

    一个简单的定时调用dos命令的例子 2, ExecJavac.java 带有异常处理的命令调用例子 3, GoodWindowsExec.java 执行windows下的命令,命令作为参数输入 Str ...

  7. python操作linux命令行_python调用调用Linux命令

    如何调用Linux命令 下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的: i ...

  8. python中调用linux命令报错cat: -: Bad file descriptor

    在python脚本中国呢调用linux命令,nohup提交报错 cat: -: Bad file descriptor 但是,结果能正常输出, 没找到原因---

  9. shell 调用matlab,在matlab中调用linux命令 以及后台运行matlab --zz

    由于matlab和linux命令各有所长:matlab比较擅长数值计算,linux命令比较擅长文件操作(matlab也基本上能够完成,但会稍微麻烦一点).所以在很多时候会需要将二者结合起来. 可能更多 ...

最新文章

  1. Jittor框架API
  2. ASA防火墙透明模式ACL总结
  3. 基于ZXing的二维码,你可以这样改造它
  4. TreeMap方法源码
  5. python 框架 优化_python+unittest框架第六天unittest之优化测试报告
  6. 小米、360之后,货拉拉被曝已启动造车项目!官方回应
  7. python数据结构剑指offer-两个链表的第一个公共结点
  8. 如何防止在ListBox中添加很多数据出现不停的刷新?
  9. 构建手机apk的过程
  10. TensorFlow实战minist数据集 softmax回归分类(一)
  11. InfoGAN原理PyTorch实现Debug记录
  12. 实现仿微信朋友圈评论输入框
  13. A 跳高【中兴捧月神算师-算法精英挑战赛-比特派第一场】
  14. 如何把pdf拆分成多个文件?
  15. 青龙脚本之-饿了么脚本
  16. QFramework引入Utility和System
  17. 靶机渗透练习57-digitalworld.local:JOY
  18. c++串口配置及DCB结构体
  19. python fun函数、求4x4整型数组的主对角线元素的和_输入4行4列的二维数组,求计算主对角线各元素之和,计算副对角线各元素之和。...
  20. Cadstar格式导入功能

热门文章

  1. 铁路 12306 网站否认发生用户信息泄漏
  2. 读书笔记—写给大家看的PPT设计书
  3. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
  4. 6年Microsoft MVP,是否还能坚持4年?
  5. 带你入门 CSS Grid 布局
  6. 从性能角度选购Adroid智能手机,双核、大屏与游戏的取舍
  7. python爬取百度百科表格_第一个python爬虫(python3爬取百度百科1000个页面)
  8. rog live service是什么_王者荣耀日活跃用户破亿!ROG游戏手机助力水友赛进入4强争夺...
  9. 学java_北京Java培训班好吗?去哪儿学
  10. 自由自在意式手工冰淇淋走俏仲夏之季