大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java調用shell腳本的方法

Java調用shell腳本的方法

更新時間:2022-07-04 12:10:13 來源:動力節點 瀏覽7456次

Java調用shell腳本的方法是什么?動力節點小編來告訴大家。

1.概述

在本教程中,我們將說明在Java代碼中執行 shell 命令的兩種方式。

第一種是使用Runtime類并調用它的exec方法。

第二種更可定制的方式是創建和使用ProcessBuilder實例。

2.操作系統依賴

在我們要創建一個執行我們的 shell 命令的新進程之前,我們需要首先確定我們的JVM正在運行的操作系統。

這是因為,在Windows上,我們需要將命令作為cmd.exe shell 的參數運行,而在所有其他操作系統上,我們可以發出標準 shell,稱為sh:

boolean isWindows = System.getProperty("os.name")
  .toLowerCase().startsWith("windows");

3.輸入輸出

此外 ,我們需要一種方法來掛鉤我們流程的輸入和輸出流。

至少必須消耗輸出- 否則我們的進程不會成功返回,而是會掛起。

讓我們實現一個名為StreamGobbler的常用類,它使用InputStream:

private static class StreamGobbler implements Runnable {
    private InputStream inputStream;
    private Consumer<String> consumer;
    public StreamGobbler(InputStream inputStream, Consumer<String> consumer) {
        this.inputStream = inputStream;
        this.consumer = consumer;
    }
    @Override
    public void run() {
        new BufferedReader(new InputStreamReader(inputStream)).lines()
          .forEach(consumer);
    }
}

注意:這個類實現了Runnable接口,這意味著它可以被任何Executor 執行。

4.運行時.exec()

對Runtime.exec()的方法調用是一種簡單的、尚未可定制的方法來生成新的子進程。

在以下示例中,我們將請求用戶主目錄的目錄列表并將其打印到控制臺:

String homeDirectory = System.getProperty("user.home");
Process process;
if (isWindows) {
    process = Runtime.getRuntime()
      .exec(String.format("cmd.exe /c dir %s", homeDirectory));
} else {
    process = Runtime.getRuntime()
      .exec(String.format("sh -c ls %s", homeDirectory));
}
StreamGobbler streamGobbler = 
  new StreamGobbler(process.getInputStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
int exitCode = process.waitFor();
assert exitCode == 0;

5.流程構建器

對于計算問題的第二個實現,我們將使用ProcessBuilder。這比運行時方法更受歡迎,因為我們能夠自定義一些細節。

例如,我們能夠:

使用builder.directory()更改我們的 shell 命令正在運行的工作目錄

使用builder.environment()將自定義鍵值映射設置為環境

將輸入和輸出流重定向到自定義替換

使用builder.inheritIO()將它們都繼承到當前JVM進程的流中

ProcessBuilder builder = new ProcessBuilder();
if (isWindows) {
    builder.command("cmd.exe", "/c", "dir");
} else {
    builder.command("sh", "-c", "ls");
}
builder.directory(new File(System.getProperty("user.home")));
Process process = builder.start();
StreamGobbler streamGobbler = 
  new StreamGobbler(process.getInputStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
int exitCode = process.waitFor();
assert exitCode == 0;

通過上述介紹,相信大家對Java調用shell腳本的方法已經有所了解,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 中文字幕在线观看一区二区 | 欧美性猛交xxxx免费看手交 | 99国产成人高清在线视频 | 欧美综合网 | 日本一级淫片a免费播放 | 妖精视频在线观看网站 | 国产精品视频一区二区三区不卡 | 精品一区二区三区在线观看l | 午夜伦情电午夜伦情影院 | 久久人人干| 日韩高清性爽一级毛片免费 | 国产亚洲综合精品一区二区三区 | 亚洲欧美精品久久 | 久久国内精品自在自线观看 | 色噜噜中文网 | 免费不卡中文字幕在线 | 国产精品免费一区二区区 | 日本一区二区三区四区在线观看 | 亚欧中文字幕 | 99国产精品热久久久久久夜夜嗨 | 美女视频黄视大全视频免费网址 | 在线免费观看一区二区三区 | 日韩一区二区天海翼 | 亚洲视频免费一区 | 欧美在线激情视频 | 欧美一级网址 | 一区二区在线不卡 | 俺来也俺来也天天夜夜视频 | 欧美日韩亚洲精品国产色 | 国产成人精品一区二三区在线观看 | 色天天综合| 亚洲综合在线另类色区奇米 | 日本一级淫一片免费 | 中文字幕不卡在线观看 | 五月色婷婷琪琪综合伊人 | 久久久久久久九九九九 | 九九色网 | 久久semm亚洲国产 | 午夜国产精品久久久久 | 久久99精品久久久久久h | 亚洲国产成人91精品 |