java调用cd传输_Java调用Linux命令(cd的处理)
一、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的处理)相关推荐
- Java开发人员必须掌握的Linux命令(二)
子曰:"工欲善其事,必先利其器." 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 文章目录 ...
- Java开发人员必须掌握的Linux命令(三)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博 ...
- Java开发人员必须掌握的Linux命令-学以致用(五)
子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...
- linux 运行java工程师_java工程师linux命令,这篇文章就够了
精彩内容推荐 shell简介 1.1 shell家族 shell:命令解释器,根据输入的命令执行相应命令. 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的sh ...
- java代码执行linux命令_java执行Linux命令的方法
本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: public class StreamGobbler extends Thread { InputStream ...
- java调用.sh文件_java 调用cmd/sh文件
最近在做产品遇到java在windows下面调用bat脚本和在linux下调用shell脚本,现在记录一下以便以后查阅. 首先贴出RuntimeUtils工具类,此类简化了 Runtime中exec的 ...
- java exe 返回值_java调用exe返回值
{// getAccount 方法,使用 get 方法; return accounts.get(index); } } Bank .java: package com.mybank.domain; ...
- linux命令cd回退_GitHub - gmpy/cdirs: cdirs 用于在linux中快速切换目录,对庞大的项目工程效果显著.其基于标签且无缝取代cd命令,学习成本非常低...
cdirs cdirs 用于在目录间任意跳转,对庞大的项目工程效果显著. 支持标签目录,支持任意目录跳转到标签标记的目录 支持回退目录,快速返回到上级目录,摆脱多次"../../../..& ...
- Java程序员最常用的Linux命令
大家都知道,Linux系统提供了非常多非常多的命令或工具,这些命令都各有所长,都是系统需要的.但我们精力有限,要掌握全部的命令不太现实,所以只需要掌握其中部分常用的命令即可.这里,我就从一个Java程 ...
最新文章
- 【数据展示】matplotlib设置画面大小
- 成功解决AttributeError: 'DataFrame' object has no attribute 'tolist'
- 曹大带我学 Go(8)—— 一个打点引发的事故
- Chrome扩展应用Infinity New Tab的备份
- common lisp 学习第三天 函数、注释
- 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
- Python 进阶之递归函数一点都不难!
- Pair Programming (结对编程)
- c语言中math的作用,C语言Math函数库简介
- php渐变闪动字体代码,《天龙八部2》33种超好看彩色闪字渐变代码分享
- cvte软件测试在线测评,CVTE笔试题总结归纳
- react-jwchat,一个简单的web聊天组件
- 华为交换机命令 简单配置DHCP
- Invisible Backdoor Attack with Sample-Specific Triggers 论文笔记
- matlab如何寻找兼职
- win7 微信 代理服务器,Win7系统使用电脑版微信如何@别人
- Kafka SASL/PLAIN 环境构建(Docker版)
- USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解
- 电脑故障3000实例排查大全! 计算机报错大全
- mysql的ole db 访问接口msdasql的数据源对象_无法从链接服务器 (null) 的 OLE DB 访问接口 MSDASQL 获取列信息...
热门文章
- Java基础知识回顾
- Android小项目之---选择对话框(附源码)
- arm 饱和指令_ARM平台下NEON使用方法详解
- java 异常 理解_java中的异常理解
- Java迭代器(转)(iterator详解以及和for循环的区别)
- linux升级ssh到6.6版本,centos6.5升级openssh到7.4版本
- mysql 设置表空间位置_如何修改表空间数据文件路径
- 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
- MF0 AI+IoT K210 人脸识别模块 应用笔记-(1)
- 选频放大电路对于150kHz导航信号进行放大检波