http://blog.csdn.net/zhaoxinfan/article/details/11891701
在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。
JAVA调用很简单,例子如下:
首先是shell脚本
- #!/bin/sh
- echo Begin word cluster
- /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
- echo The word classes were saved to file classes.csv
然后是JAVA调用代码
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- public class RunShell {
- public static void main(String[] args){
- try {
- String shpath="/home/felven/word2vec/demo-classes.sh";
- Process ps = Runtime.getRuntime().exec(shpath);
- ps.waitFor();
- BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
- StringBuffer sb = new StringBuffer();
- String line;
- while ((line = br.readLine()) != null) {
- sb.append(line).append("\n");
- }
- String result = sb.toString();
- System.out.println(result);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
其实就是一个Process类进行调用,然后把shell的执行结果输出到控制台下。
需要注意的是,在调用时需要执行waitFor()函数,因为shell进程是JAVA进程的子进程,JAVA作为父进程需要等待子进程执行完毕。
另外在eclipse控制台输出时并不是边执行边输出,而是shell全部执行完毕后输出,所以如果执行较为复杂的shell脚本看到没有输出时可能会误以为没有执行,这个时候看看终端里面的进程,TOP命令一下就能看到其实shell脚本已经开始执行了。
相关推荐
总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...
总结,Java调用Shell脚本是实现系统级任务自动化的重要手段,但同时也需要关注安全性、资源管理和错误处理等问题。通过合理使用Runtime和ProcessBuilder,我们可以构建出高效且安全的Java-Shell交互解决方案。在实际...
* 批量任务:我们可以使用 Java 调用 Shell 命令来执行批量任务,例如使用 `bash` 命令来执行批量脚本。 Java 调用 Shell 命令的优缺点 Java 调用 Shell 命令有很多优点,例如: * 可以执行系统命令或脚本,具有...
### Java调用Shell脚本详解 #### 一、前言 在实际开发过程中,经常会遇到需要结合Java程序与Shell脚本进行操作的情况。通过Java调用Shell脚本不仅可以实现复杂的功能,还可以提高程序的灵活性和扩展性。本文将详细...
首先,Java调用shell脚本主要通过`Runtime`类或`ProcessBuilder`类来实现。`Runtime.getRuntime().exec()`方法允许我们执行系统命令,而`ProcessBuilder`提供了更灵活的命令构建和环境变量设置功能。下面是一个基本...
在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...
### Java调用Shell命令知识点详解 #### 一、概述 在特定的应用场景中,比如完成外币资金的调度工作后,可能需要通过Java程序来生成一个文本文件,并进一步利用Shell脚本来实现文件传输等操作。这涉及到Java与操作...
在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。
在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如自动化运维、文件管理等,这时就可能需要用到调用Shell脚本。本文将详细介绍如何在Java中完美封装shell脚本的调用方法,并提供相关的...
7. **考虑安全性和性能**:在使用shell脚本时,一定要注意安全问题,避免执行可能导致系统不稳定或数据泄露的命令。同时,频繁的shell调用可能会消耗大量系统资源,因此要合理优化。 8. **存储脚本的位置**:通常,...
Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...
Java 远程调用Shell脚本客户端包是一个实用的工具,专为开发者设计,使得在Java应用程序中执行远程Shell命令变得简单而高效。这个包的主要功能是通过Java代码发起对远程服务器上的Shell脚本的调用,从而实现跨平台的...
3. **批量文件处理**:例如,使用Shell脚本处理大量日志文件,进行日志分析或清理。 4. **跨平台兼容性测试**:通过在不同操作系统上运行Shell脚本,确保Java应用在各种环境下都能正常工作。 ### 总结 Java调用...
Java调用shell脚本解决传参和权限问题的方法 Java调用shell脚本解决传参...Java调用shell脚本解决传参和权限问题的方法可以通过将shell命令或脚本和参数放入一个数组中,并在执行脚本之前赋予脚本执行权限来解决问题。
在Java中,我们可以通过`Runtime.getRuntime().exec()`方法来执行shell命令。例如,以下代码会赋予名为`test.sh`的脚本所有用户的执行权限: ```java String cmdstring = "chmod a+x test.sh"; Process proc = ...
标题"shell 脚本调用Java类"指出我们要讨论的主题是如何在Shell脚本中执行Java程序,尤其是直接调用Java类。下面我们将深入探讨这个主题。 首先,要从Shell脚本中运行Java程序,你需要确保系统已经安装了Java环境,...
使用JAVA调用Shell脚本需要使用Process类,以下是一个示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class RunShell { public static void main(String[] args) { ...
下面我们将深入探讨如何使用shell脚本来启动Java程序以及相关的知识点。 首先,我们需要了解Java程序的运行方式。Java应用程序通常由一个主类(包含`main`方法)作为入口点。通过`java`命令,我们可以指定这个主类...