java 执行cd_Java调用Linux命令(cd的处理)
一、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的处理)相关推荐
- linux下java命令行参数_Java调用Linux命令行
Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...
- java如何调用linux命令_java程序中如何调用linux命令
java程序中如何调用linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服 ...
- java linux root权限管理_Java 执行root 权限linux命令
打开终端,先以 root 身份登录:su root 然后执行:visudo (visudo编辑sudoers配置文件) 在打开的文件中,找到下面这一行: root ALL=(ALL) ALL 并紧帖其 ...
- linux php 执行命令权限不够,PHP调用Linux命令权限不足问题解决方法
PHP调用Linux命令权限不足问题解决方法 业务背景: yourcmd为我的linux程序,它对权限要求非常严格,当用php去执行yourcmd程序 系统:CentOS 6.3 apache是ph ...
- 安卓程序中调用 linux 命令
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 在研究串口 jni 开发的时候,遇到了这样一段代码: Process su;su = Runtime.getRuntim ...
- java版本streamgobbler_java调用本地命令 Runtime class's exec() method
一个简单的定时调用dos命令的例子 2, ExecJavac.java 带有异常处理的命令调用例子 3, GoodWindowsExec.java 执行windows下的命令,命令作为参数输入 Str ...
- python操作linux命令行_python调用调用Linux命令
如何调用Linux命令 下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的: i ...
- python中调用linux命令报错cat: -: Bad file descriptor
在python脚本中国呢调用linux命令,nohup提交报错 cat: -: Bad file descriptor 但是,结果能正常输出, 没找到原因---
- shell 调用matlab,在matlab中调用linux命令 以及后台运行matlab --zz
由于matlab和linux命令各有所长:matlab比较擅长数值计算,linux命令比较擅长文件操作(matlab也基本上能够完成,但会稍微麻烦一点).所以在很多时候会需要将二者结合起来. 可能更多 ...
最新文章
- Jittor框架API
- ASA防火墙透明模式ACL总结
- 基于ZXing的二维码,你可以这样改造它
- TreeMap方法源码
- python 框架 优化_python+unittest框架第六天unittest之优化测试报告
- 小米、360之后,货拉拉被曝已启动造车项目!官方回应
- python数据结构剑指offer-两个链表的第一个公共结点
- 如何防止在ListBox中添加很多数据出现不停的刷新?
- 构建手机apk的过程
- TensorFlow实战minist数据集 softmax回归分类(一)
- InfoGAN原理PyTorch实现Debug记录
- 实现仿微信朋友圈评论输入框
- A 跳高【中兴捧月神算师-算法精英挑战赛-比特派第一场】
- 如何把pdf拆分成多个文件?
- 青龙脚本之-饿了么脚本
- QFramework引入Utility和System
- 靶机渗透练习57-digitalworld.local:JOY
- c++串口配置及DCB结构体
- python fun函数、求4x4整型数组的主对角线元素的和_输入4行4列的二维数组,求计算主对角线各元素之和,计算副对角线各元素之和。...
- Cadstar格式导入功能
热门文章
- 铁路 12306 网站否认发生用户信息泄漏
- 读书笔记—写给大家看的PPT设计书
- 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案
- 6年Microsoft MVP,是否还能坚持4年?
- 带你入门 CSS Grid 布局
- 从性能角度选购Adroid智能手机,双核、大屏与游戏的取舍
- python爬取百度百科表格_第一个python爬虫(python3爬取百度百科1000个页面)
- rog live service是什么_王者荣耀日活跃用户破亿!ROG游戏手机助力水友赛进入4强争夺...
- 学java_北京Java培训班好吗?去哪儿学
- 自由自在意式手工冰淇淋走俏仲夏之季