java应用Runtime.exec调用linux命令
以下是一个简单类的范例,展示了在Unix下运行ls命令的情形:
import java.io.BufferedInputStream;
import java.io.IOException;
public class ExecLs {
static public void main(String[] args) {
String cmd = "ls"
try {
Process ps = Runtime.getRuntime().exec(cmds);
System.out.print(loadStream(ps.getInputStream()));
System.err.print(loadStream(ps.getErrorStream()));
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
// read an input-stream into a String
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
while( (ptr = in.read()) != -1 ) {
buffer.append((char)ptr);
}
return buffer.toString();
}
上述代码中重要的部分是exec方法和命令字符串ls。本程序将输出运行目录下的列表细节。
那么,如果你想重定向这些细节内容到文件该怎么办?这一命令行的输入应该写成ls > FILE,但是当你将cmd变量改变成这样的话,运行就会出错,如下:
/bin/ls: >: No such file or directory
/bin/ls: FILE: No such file or directory
出错的原因在于额外的参数被直接传送到了ls命令而不是送到实际的命令行。解决这一问题的办法是将cmd串弄成一个字符串数组,并且将你想运行的程序传送到命令shell。
因此,将cmd行改成下面的样子:
String[] cmd = { "sh", "-c", "ls > FILE" };
你将得到一个名为FILE的文件,里面是目录列表。-c参数是告诉它读取随后的字符串,而最后的参数是你要运行的脚本。
在这种情况下,管道也运行良好,所以你可以把命令改成下面的方式:
String[] cmd = { "/bin/sh", "-c", "/bin/ls | grep d > FILE" };
这种形式将给你一个名为FILE的文件,里面是ls条目中包含d的条目。给出sh和ls的全路径有利于提供你的程序的安全性。
虽然使用Runtime.exec不是创建独立于平台的Java的最佳方式,但是有些时候是必要的。使用这种重定向技术有助于走出Runtime.exec的限制。
说明:
1. exec的必须是可执行的程序,如果是命令行的命令则还需另外处理
2. 在windows中process = runtime.exec(new String[] { "cmd.exe","/C", "dir"});
3. 在linux中process = runtime.exec(new String[] { "/bin/sh","-c", "echo $PATH"});
分享到:
相关推荐
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
### Java调用Linux命令 Java提供了一种强大的机制来执行操作系统级别的任务,其中包括调用Linux命令。实现这一功能的核心是`Runtime`类中的`exec()`方法。这个方法允许Java应用程序创建一个新的进程来执行指定的...
java调用linux系统命令的封装工具类。
本文将详细介绍如何使用Java调用Linux命令,以满足特定场景的需求,如文中提到的通过Java接口重启keepalived服务。首先,我们将理解Java调用Linux命令的基本原理,然后通过具体的代码示例来展示实现这一功能的过程。...
java调用Linux命令获取输出流,用于解决获取不到输出流的方法
本文将详细探讨如何利用Java调用Linux命令,这一技能对于任何希望在Java应用中集成Linux功能的开发者来说都是至关重要的。 ### Java调用Linux命令的方法 Java提供了多种方式来执行外部命令或脚本,其中最常用的是...
2. **Java调用Linux命令** - 在Java中,可以通过`Runtime.getRuntime().exec()`或`ProcessBuilder`类来执行Linux命令。在描述中提到的`getDiskUsage`方法就使用了`ProcessBuilder`来执行`df -hl -P`命令,获取磁盘...
在Linux系统下,Java编程语言提供了丰富的API来执行操作系统级别的命令。这主要通过`java.lang.Runtime`类和`java.lang.ProcessBuilder`类实现。本文将深入讲解如何在Java程序中调用Linux命令,并通过实例来阐述这一...
java 执行linux命令源码,java调用shell脚本源码,java web发布war到tomcat,servlet文件上传,ajax文件上传。 java web 上传war包、停止、启动、发布tomcat。 命令修改成自己的目录即可使用。
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
在项目"使用java远程调用Linux命令_java-linux-command"中,主要涉及的技术和知识点包括Java网络编程、进程管理、以及对Linux系统命令的调用。Java提供了丰富的API来执行这些操作,例如java.lang.Runtime和java.lang...
在这个特定的问题"Java调用Linux CentOS系统安装的OpenOffice4报错"中,开发者可能在尝试使用Java来自动化处理文档,如转换Office格式,而OpenOffice4提供了一个开源的解决方案,可以将Microsoft Office文档转换为...
SSHXCUTE.jar是一个Java库,它允许程序员通过SSH连接到Linux系统并执行shell命令,而无需深入了解SSH的底层细节。 SSHXCUTE.jar的核心功能包括: 1. **建立SSH连接**:通过提供主机名、用户名、密码或密钥对信息,...
java代码执行linux系统命令
Java中常用的Linux命令 Linux命令是Java开发中不可或缺的一部分,掌握这些命令可以提高开发效率和解决问题的能力。本文总结了常用的Linux命令,涵盖文件管理、进程管理、网络管理、文件传输和其他方面。 文件管理 ...
Java调用DOS命令是指在Java程序中执行操作系统级别的命令,比如Windows下的CMD命令或Linux下的Shell命令。这种功能在很多场景下都很有用,比如自动化脚本、文件操作、系统管理等。Java提供了Runtime类和...
总的来说,Java通过JSch库远程登录Linux服务器并执行命令,是Java与Linux系统交互的一种常用方式,尤其适用于自动化运维和脚本化的任务。通过理解并实践这些代码,你将能够更好地理解和掌握Java进行远程操作的能力。
在Java编程环境中,远程登录Linux系统并执行命令是一项常见的任务,尤其在自动化运维、系统管理以及分布式系统中。本文将详细讲解如何实现这一功能,并基于给出的“AutoStart”文件名,推测这是一个自动启动相关服务...
在Unix或Linux系统中,你可能会使用`libreoffice --view`或者`open`命令来打开.doc文件。 总的来说,Java调用doc命令涉及了Java与操作系统交互的能力,这在系统集成、自动化测试或文件处理场景中非常常见。正确理解...
本项目专注于使用Java语言构建一个针对Linux操作系统的简单命令解释器,这为理解这两者的结合提供了一个实用的学习平台。以下是关于这个项目的详细知识点: 1. **Java语言**:Java是一种跨平台的面向对象的编程语言...