FROM:http://blog.csdn.net/jj12345jj198999/article/details/11891701

在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。

JAVA调用很简单,例子如下:

首先是shell脚本

1 #!/bin/sh
2 echo Begin word cluster
3 /home/felven/word2vec/word2vec -train /home/felven/word2vec/resultbig.txt -output /home/felven/word2vec/classes.csv -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 2000
4 echo The word classes were saved to file classes.csv

View Code

然后是JAVA调用代码

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3
 4 public class RunShell {
 5     public static void main(String[] args){
 6         try {
 7             String shpath="/home/felven/word2vec/demo-classes.sh";
 8             Process ps = Runtime.getRuntime().exec(shpath);
 9             ps.waitFor();
10
11             BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
12             StringBuffer sb = new StringBuffer();
13             String line;
14             while ((line = br.readLine()) != null) {
15                 sb.append(line).append("\n");
16             }
17             String result = sb.toString();
18             System.out.println(result);
19             }
20         catch (Exception e) {
21             e.printStackTrace();
22             }
23     }
24 }

View Code

其实就是一个Process类进行调用,然后把shell的执行结果输出到控制台下。

需要注意的是,在调用时需要执行waitFor()函数,因为shell进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。

另外在eclipse控制台输出时并不是边执行边输出,而是shell全部执行完毕后输出,所以如果执行较为复杂的shell脚本看到没有输出时可能会误以为没有执行,这个时候看看终端里面的进程,TOP命令一下就能看到其实shell脚本已经开始执行了。

---------------------------------------------------------------------------------------

如果需要传参数的话,直接加在字符串中,如 String shpath = "/home/hadoop/Documents/CreateDir.sh test1";

还有一点是,当java运行时,Shell的工作目录会变成主类或者jar包所在的目录,个人觉得要尽量使用绝对路径.

转载于:https://www.cnblogs.com/wmx3ng/p/4135176.html

[转载]JAVA调用Shell脚本相关推荐

  1. java无阻塞执行脚本,JAVA调用Shell脚本-及阻塞的解决方法

    JAVA调用Shell脚本--及阻塞的解决办法 用java调用shell,使用 Process p=Runtime.getRuntime().exec(String[] cmd); Runtime.e ...

  2. java调用shell脚本并传递参数

    最近业务上需要java调用执行shell脚本进行一些业务处理,写了个demo,记录下. 主要代码 @RequestMapping("/copy/database")@Respons ...

  3. java调用shell脚本及注意事项

    需求: get方法下载远程zip包,然后zip包解压,取出第一级目录再次进行压缩获取新的压缩zip包. 问题: 如果选择使用java代码的IO流操作,在不确定zip包大小的情况下可能会占用很大的内存, ...

  4. java调用shell脚本_Java 执行Shell脚本指令

    一.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRu ...

  5. Java调用 shell脚本阻塞

    Java在调用Shell时,要不断读取进程中标准输出和错误输出流的信息,否则缓冲区被写满就会造成子进程阻塞而无法继续运行下去,可起两个线程不断读取标准输出.错误流信息而不被阻塞 import java ...

  6. JAVA调用shell脚本实例

    2019独角兽企业重金招聘Python工程师标准>>> ~/testcode/HelloWorld.java源码文件 1 public class HelloWorld{   2   ...

  7. Java 调用Shell脚本

    最近我的项目要我在WebService里用Java调用Linux下的Shell 脚本,在网上找了一些资料,以供学习. 地址:http://brian.pontarelli.com/2005/11/11 ...

  8. Java 调用Shell脚本执行 SCP命令提示Authorized users only. All activity may be monitored and reported.

    近期做了个小项目主要是关于数据处理这方面的. 在Java后端调用服务器上Shell脚本,而Shell脚本执行时一条Scp执行结果的提示报 Authorized users only. All acti ...

  9. java调用shell脚本,解决传参和权限问题

    1. java 执行shell java 通过 Runtime.getRuntime().exec() 方法执行 shell 的命令或 脚本,exec()方法的参数可以是脚本的路径也可以是直接的 sh ...

最新文章

  1. margin-top的百分比是相对父元素的哪个值
  2. Openlayers中使用Overlay实现点击要素弹窗并且弹窗随之移动
  3. 在exchange中设置外网邮件域名与内网域名不同
  4. vmware创建虚拟机并安装centos7系统
  5. CentOS7虚拟机断电,出现:“Entering emergency mode. Exit the shell to continue.”
  6. java 杭电3784继续xxx定律 栈的使用
  7. java在控制台输出空心正方形,菱形,空心菱形
  8. solaris10上修改最大文件句柄数
  9. python软件下载百度云-python电子书学习资料打包分享百度云资源下载
  10. 天聪公司研发成功第三代声纹识别算法
  11. python除数为0报错_python 错误捕获机制分析
  12. redis监控工具_企业级别Redis监控,细化到每个项目实例
  13. List转Json数组
  14. 主机炸鸡?Z世代主机市场终究是肯德基的?
  15. VBA 中Dim含义
  16. 华中科技大学计算机证书领取,华中科技大学计算机水平测试软考报名通知
  17. 看完315晚会,我们的数据隐私谁来保护?
  18. 前后台端分离 跨域SESSION 失效问题
  19. 深度清理C盘空间,让你的C盘多出20G
  20. JZOJ6362. 【NOIP2019模拟2019.9.18】数星星(star)

热门文章

  1. 无法更新计算机的配置,“windows 无法更新计算机的启动配置。安装无法继续”这样解决...
  2. 游戏建模行业前景广阔?需要什么条件才能踏足在行业?
  3. js添加删除数组元素
  4. 什么是Java动态代理,如何实现一个动态代理例子
  5. MySQL数据库5.7升级到8.0版本
  6. Week11——D 寿司
  7. (马士兵教育)如何提高ES分布式系统的可用性以及性能最大化
  8. Windows脚本之拷贝文件---简化工作
  9. asp.net做网页界面有种隔靴挠痒的感觉
  10. 常见的浏览器以及他们的优缺点。