在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java Runtime.exec 执行shell命令

2017-2-13 12:57| 发布者: zhangjf| 查看: 1261| 评论: 0

摘要: 最近做一个团购文件下载服务的时候,自己偷懒不想写文件下载的逻辑,而且Linux的curl 命令非常强大,于是乎想直接通过Java来执行curl命令做下载。 在Java中,你可以通过Runtime.getRuntime().exec 来执行外部 ...
最近做一个团购文件下载服务的时候,自己偷懒不想写文件下载的逻辑,而且Linux的curl 命令非常强大,于是乎想直接通过Java来执行curl命令做下载。

在Java中,你可以通过Runtime.getRuntime().exec 来执行外部的shell命令。

  1. Process proc = Runtime.getRuntime().exec("ping www.baidu.com");
  2. InputStream in = proc.getInputStream();
  3. BufferedReader br = new BufferedReader(new InputStreamReader(in, "GBK"));
  4. String line = null;
  5. while((line=br.readLine())!=null){
  6. System.out.println(line);
  7. }
复制代码

下面通过执行一个简单的 ping命令并打印其输出 作为示例。
  1. package com.ricky.java.sms;
  2. import java.io.BufferedReader;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. public class RuntimeTest {
  8. public static void main(String[] args) {
  9. // methodA();
  10. methodB();
  11. }
  12. public static void methodB() {
  13. BufferedReader br = null;
  14. try {
  15. Process proc = Runtime.getRuntime().exec("ping www.baidu.com");
  16. InputStream in = proc.getInputStream();
  17. br = new BufferedReader(new InputStreamReader(in, "GBK"));
  18. String line = null;
  19. while((line=br.readLine())!=null){
  20. System.out.println(line);
  21. }
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }finally{
  25. if(br!=null){
  26. try {
  27. br.close();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }
  33. }
  34. public static void methodA() {
  35. InputStream in = null;
  36. try {
  37. Process proc = Runtime.getRuntime().exec("ping www.baidu.com");
  38. in = proc.getInputStream();
  39. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  40. in = proc.getInputStream();
  41. byte[] buf = new byte[1024];
  42. int len = 0;
  43. while ((len = in.read(buf, 0, 1024)) != -1) {
  44. baos.write(buf, 0, len);
  45. }
  46. byte[] arr = baos.toByteArray();
  47. String result = new String(arr, "GBK");
  48. System.out.println("result="+result);
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }finally{
  52. if(in!=null){
  53. try {
  54. in.close();
  55. } catch (IOException e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. }
  61. }
复制代码

打印的结果如下:



正在 Ping www.a.shifen.com [180.149.131.205] 具有 32 字节的数据:
来自 180.149.131.205 的回复: 字节=32 时间=1ms TTL=56
来自 180.149.131.205 的回复: 字节=32 时间=1ms TTL=56
来自 180.149.131.205 的回复: 字节=32 时间=1ms TTL=56
来自 180.149.131.205 的回复: 字节=32 时间=1ms TTL=56


180.149.131.205 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 1ms,最长 = 1ms,平均 = 1ms

来自:http://blog.csdn.net/top_code/article/details/43052399

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 13:29

Copyright 2015-2025 djqfx

返回顶部