java执行命令行_[Java]执行命令行语句

[java]代码库package net.qiujuer.libraries.genius.command;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.IBinder;

import net.qiujuer.libraries.genius.journal.LogUtil;

import net.qiujuer.libraries.genius.utils.GlobalValue;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/**

* Created by Genius on 2014/8/13.

* 命令执行Model

*/

public class CommandModel {

private static final String TAG = CommandModel.class.getName();

//调用服务接口

private static ICommandInterface iService = null;

//服务链接类,用于实例化服务接口

private static ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

iLock.lock();

iService = ICommandInterface.Stub.asInterface(service);

if (iService != null) {

try {

iCondition.signalAll();

} catch (Exception e) {

e.printStackTrace();

}

} else

bindService();

iLock.unlock();

LogUtil.i(TAG, "onServiceConnected");

}

@Override

public void onServiceDisconnected(ComponentName name) {

iService = null;

LogUtil.i(TAG, "onServiceDisconnected");

}

};

//锁

private static Lock iLock = new ReentrantLock();

//等待与唤醒

private static Condition iCondition = iLock.newCondition();

//执行参数

private String parameter;

//是否取消测试

private boolean isCancel;

/**

* 实例化

*

* @param params @param params 命令参数 eg: "/system/bin/ping", "-c", "4", "-s", "100","www.qiujuer.net"

*/

public CommandModel(String... params) {

//check params

if (params == null)

throw new NullPointerException();

//run

StringBuilder sb = new StringBuilder();

for (String str : params) {

sb.append(str);

sb.append(" ");

}

this.parameter = sb.toString();

}

/**

* 执行测试

*

* @param model ProcessModel

* @return 结果

*/

public static String command(CommandModel model) {

//检测是否取消测试

if (model.isCancel)

return null;

//check Service

if (iService == null) {

iLock.lock();

try {

iCondition.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

iLock.unlock();

}

String result;

try {

result = iService.command(model.parameter);

} catch (Exception e) {

e.printStackTrace();

bindService();

result = command(model);

}

return result;

}

/**

* 启动并绑定服务

*/

private static void bindService() {

Context context = GlobalValue.getContext();

Intent intent = new Intent(context, CommandService.class);

context.startService(intent);

context.bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

/**

* 取消测试

*/

public void cancel() {

isCancel = true;

}

/**

* 静态初始化

*/

static {

bindService();

}

}//源代码片段来自云代码http://yuncode.net

694748ed64b9390909c0d88230893790.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java执行命令语句可以使用`Runtime`类或`ProcessBuilder`类。其中,`Runtime`类提供了一个静态方法`exec()`,可以直接执行命令语句,而`ProcessBuilder`类则提供了更多的配置选项。 如果需要在执行命令时中途交互输入,可以使用`Process`类的`getOutputStream()`和`getInputStream()`方法获取命令的标准输入和输出流,然后通过标准输入流将需要输入的内容写入命令,最后通过标准输出流读取命令的输出结果。 以下是一个使用`ProcessBuilder`类执行命令并中途交互输入的示例代码: ``` ProcessBuilder pb = new ProcessBuilder("cmd.exe"); Process p = pb.start(); OutputStream os = p.getOutputStream(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); // 输入命令 bw.write("your_command_here"); bw.newLine(); bw.flush(); // 输入需要交互的内容 bw.write("your_input_here"); bw.newLine(); bw.flush(); // 读取命令输出结果 String line; while ((line = br.readLine()) != null) { System.out.println(line); } p.waitFor(); os.close(); is.close(); ``` 在这个示例代码中,我们使用`ProcessBuilder`类创建了一个`cmd.exe`的进程,并通过标准输入流将命令和需要输入的内容写入进程,最后通过标准输出流读取进程的输出结果。需要注意的是,在使用`ProcessBuilder`类执行命令时,需要使用操作系统的命令语法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值