代码改变世界

java调用执行cmd命令

2017-09-19 12:24  清风软件测试开发  阅读(7915)  评论(0编辑  收藏  举报

未经允许,禁止转载!!!

package practice;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class cmdadb {
    
    public void executeCMDconsole(String cmd) {
        //此方法为打印日志到控制台!!!!!!!!!!!!
        //此方法跑成功!!!
        
        System.out.println("在cmd里面输入"+cmd);
        Process p;
        try {
            p = Runtime.getRuntime().exec(cmd);            
            System.out.println(":::::::::::::::::::开始在控制台打印日志::::::::::::::::::::::>>>>>>");
            //p.waitFor();
            BufferedReader bReader=new BufferedReader(new InputStreamReader(p.getInputStream(),"gbk"));
            String line=null;
            while((line=bReader.readLine())!=null)
                System.out.println(line);
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }
    
    
    public String executeCMDfile(String[] cmmands, String logToFile, String dirTodoCMD ) throws IOException {
        //此方法为輸出日志到指定文件夹!!!!!!!!!!!!
        //此方法跑成功!!!
        //如果 String cmmand 那麼  String cmmand = "adb logcat -v time > d:/adb.log";
        //String[] cmmands 所以   String commands[] = { "adb", "logcat","-v","time"};
        //String logToFile  將日誌保存到logToFile
        //String dirTodoCMD 在dirTodoCMD執行cmd命令
        //由于將日志輸出到文件裡面了,就不能再将日誌輸出到console了
        
        try {
            ProcessBuilder builder = new ProcessBuilder(cmmands);
            if (dirTodoCMD != null)
                builder.directory(new File(dirTodoCMD));
            builder.redirectErrorStream(true);
            builder.redirectOutput(new File(logToFile));
            Process process = builder.start();
            process.waitFor();
            // 得到命令执行后的结果
            InputStream is = process.getInputStream();
            BufferedReader buffer = new BufferedReader(new InputStreamReader(is, "gbk"));
            String line = null;
            StringBuffer sbBuffer = new StringBuffer();
            while ((line = buffer.readLine()) != null) {
                sbBuffer.append(line);
            }
            
            is.close();
            return sbBuffer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

public static void main(String[] args) throws IOException { //String cmd="D:/Android/android-sdk-windows/platform-tools/adb logcat -v time"; //String cmd2="adb devices"; //String cmd3="adb logcat -v time"; //String cmd4="adb logcat -v time > d:/adb.log"; cmdadb adbc = new cmdadb(); adbc.executeCMDconsole("adb logcat -v time"); String commands[] = { "adb", "logcat","-v","time"}; adbc.executeCMDfile(commands, "D:/adb.logs", "C:/Users/wb-cjz286752"); //System.out.println(result);由于將日志輸出到文件裡面了,就不能再将日志輸出到console了 } }