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

这是一个非常常用的调用方法示例:

1 publicString executeLinuxCmd(String cmd) {2 System.out.println("got cmd job :" +cmd);3 Runtime run =Runtime.getRuntime();4 try{5 Process process =run.exec(cmd);6 InputStream in =process.getInputStream();7 BufferedReader bs = new BufferedReader(new InputStreamReader(in));8 //System.out.println("[check] now size

"+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() + "]");

14 in.close();15 //process.waitFor();

16 process.destroy();17 returnresult;18 } catch(IOException e) {19 e.printStackTrace();20 }21 return null;22 }

二、含有管道符(|)多级命令串联查询

public ListexecuteLinuxCmd(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(newInputStreamReader(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();returnlist;

}catch(IOException e) {

e.printStackTrace();

}return null;

}

三、含有cd操作的方法示例

1. 问题背景

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长连接,保持连接,发送多条命令,最后释放连接。

示例逻辑代码:

1 public voidexecuteNewFlow() {2 Runtime run =Runtime.getRuntime();3 File wd = new File("/bin");4 System.out.println(wd);5 Process proc = null;6 try{7 proc = run.exec("/bin/bash", null, wd);8 } catch(IOException e) {9 e.printStackTrace();10 }11 if (proc != null) {12 BufferedReader in = new BufferedReader(newInputStreamReader(proc.getInputStream()));13 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);14 out.println("cd /home/test");15 out.println("pwd");16 out.println("rm -fr /home/proxy.log");17 out.println("exit");//这个命令必须执行,否则in流不结束。18 try{19 String line;20 while ((line = in.readLine()) != null) {21 System.out.println(line);22 }23 proc.waitFor();24 in.close();25 out.close();26 proc.destroy();27 } catch(Exception e) {28 e.printStackTrace();29 }30 }31 }

三的优化和演进(返回值)

public List executeNewFlow(Listcommands) {

List rspList = new ArrayList();

Runtime run=Runtime.getRuntime();try{

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

BufferedReaderin = new BufferedReader(newInputStreamReader(proc.getInputStream()));

PrintWriterout = 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();

}returnrspList;

}

java调用cd传输_Java调用Linux命令(cd的处理)相关推荐

  1. Java开发人员必须掌握的Linux命令(二)

    子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 文章目录 ...

  2. Java开发人员必须掌握的Linux命令(三)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博 ...

  3. Java开发人员必须掌握的Linux命令-学以致用(五)

    子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...

  4. linux 运行java工程师_java工程师linux命令,这篇文章就够了

    精彩内容推荐 shell简介 1.1 shell家族 shell:命令解释器,根据输入的命令执行相应命令. 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的sh ...

  5. java代码执行linux命令_java执行Linux命令的方法

    本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thread { InputStream ...

  6. java调用.sh文件_java 调用cmd/sh文件

    最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...

  7. java exe 返回值_java调用exe返回值

    {// getAccount 方法,使用 get 方法; return accounts.get(index); } } Bank .java: package com.mybank.domain; ...

  8. linux命令cd回退_GitHub - gmpy/cdirs: cdirs 用于在linux中快速切换目录,对庞大的项目工程效果显著.其基于标签且无缝取代cd命令,学习成本非常低...

    cdirs cdirs 用于在目录间任意跳转,对庞大的项目工程效果显著. 支持标签目录,支持任意目录跳转到标签标记的目录 支持回退目录,快速返回到上级目录,摆脱多次"../../../..& ...

  9. Java程序员最常用的Linux命令

    大家都知道,Linux系统提供了非常多非常多的命令或工具,这些命令都各有所长,都是系统需要的.但我们精力有限,要掌握全部的命令不太现实,所以只需要掌握其中部分常用的命令即可.这里,我就从一个Java程 ...

最新文章

  1. 【数据展示】matplotlib设置画面大小
  2. 成功解决AttributeError: 'DataFrame' object has no attribute 'tolist'
  3. 曹大带我学 Go(8)—— 一个打点引发的事故
  4. Chrome扩展应用Infinity New Tab的备份
  5. common lisp 学习第三天 函数、注释
  6. 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  7. Python 进阶之递归函数一点都不难!
  8. Pair Programming (结对编程)
  9. c语言中math的作用,C语言Math函数库简介
  10. php渐变闪动字体代码,《天龙八部2》33种超好看彩色闪字渐变代码分享
  11. cvte软件测试在线测评,CVTE笔试题总结归纳
  12. react-jwchat,一个简单的web聊天组件
  13. 华为交换机命令 简单配置DHCP
  14. Invisible Backdoor Attack with Sample-Specific Triggers 论文笔记
  15. matlab如何寻找兼职
  16. win7 微信 代理服务器,Win7系统使用电脑版微信如何@别人
  17. Kafka SASL/PLAIN 环境构建(Docker版)
  18. USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解
  19. 电脑故障3000实例排查大全! 计算机报错大全
  20. mysql的ole db 访问接口msdasql的数据源对象_无法从链接服务器 (null) 的 OLE DB 访问接口 MSDASQL 获取列信息...

热门文章

  1. Java基础知识回顾
  2. Android小项目之---选择对话框(附源码)
  3. arm 饱和指令_ARM平台下NEON使用方法详解
  4. java 异常 理解_java中的异常理解
  5. Java迭代器(转)(iterator详解以及和for循环的区别)
  6. linux升级ssh到6.6版本,centos6.5升级openssh到7.4版本
  7. mysql 设置表空间位置_如何修改表空间数据文件路径
  8. 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
  9. MF0 AI+IoT K210 人脸识别模块 应用笔记-(1)
  10. 选频放大电路对于150kHz导航信号进行放大检波