Calling external scrips from Java?

Hi,
I am writing a Java application to call an external script, to start with a unix shell script. I need the application to not only call this script but also for the script to return some sort of value or variable to the Java application.
Is it possible for Java to get return variables from external scripts?
Thank you,
Paul

The following code snippet executes a given command and returns an array containing its return code and its standard error output. Hope this helps.
        private Object [] performKshCommand(String command) {
        int     iRet=-1;
        String  sRet=null;
                if (DEBUG1) System.out.println("performKshCommand\n" + command);
                try     {
                        Runtime         rt=Runtime.getRuntime();
                        Process         proc=rt.exec(command);
                        InputStream is=proc.getInputStream();
                        LineNumberReader lnr=new LineNumberReader(new InputStreamReader (is));
                        sRet=lnr.readLine();
                        String line;
                        while((line=lnr.readLine()) != null) {
                                if (DEBUG1) System.out.println(line);
                                InputStream is2=proc.getErrorStream();
                                LineNumberReader lnr2=new LineNumberReader(new InputStreamReader (is2));
                                while((line=lnr2.readLine()) != null) {
                                        System.err.println(line);
                        iRet=proc.waitFor();
                catch (Exception e) {
                        if (DEBUG) e.printStackTrace();
                        if (!DEBUG) e.printStackTrace();
                return new Object [] { new Integer(iRet), sRet} ;

Similar Messages

  • Calling external programs from Java?

    Hi All,
    Is there a way of calling external applications from Java without using Runtime.exec(). That method seems quite messy when you are dealing with streaming data from an input file to an output file. Basically what I'm asking is there a way to run a command the same way you would type it in a command shell?
    Thanks

    LeWalrus wrote:
    Ok, I've an external application that I want to be called inside a Java GUI. It has several input arguements, which the format looks something like:
    programname inputfile > outputfile
    Simple enough.
    >
    Works fine from a shell command line. From what I understand, this won't work using Runtime.exec() because that method will just start the application. Works fine from Runtime.exec(). Since you are'>' to write stdout to a file you need to us a shell to execute the command.
    String[] command = {"sh", "-c","programname inputfile > outputfile"};
    Process process = runtime.exec(command);
    You need to read, digest and implement the recommendations given in http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html .
    File input and output from the application has to be taken care of programatically (java.io stuff). Fine if you've only one input and output. But if you have several input files and hundreds of output files, where does this leave you. It would be much easier if you could pass a string command to the shell directly as if you typed it in the command line yoursel!

  • How to call external files from java?

    How to call external files in java. For example how to call a *.pdf file to open in its default editor(say Acrobat), or a *.html file to open in the default browser or a *.txt file in a notepad etc..,
    In my program i have *.chm (Compiled Windows HTML Help) help file. how to open it in its default editor it?

    Jayarathina_Madharasan wrote:
    no one answered my questionHi what wrong did i do...basically insulted all the volunteers here who took the time to consider your question and try to offer you help. Other than that, you did nothing wrong.
    From JavaRanch :
    And even if an answer doesn't solve your problem, even if it should totally miss the point - the best thing to do to motivate others to continue trying to help you is showing respect and gratitude for the investment of time that was put into dealing with your issue.
    Edited by: Encephalopathic on Apr 14, 2008 10:01 AM

  • Calling external servlet from java stored procedure

    Hello,
    I need to call an external servlet which is in 9iAS server ( unix box) from Java Stored procedure in oracle database.
    Can anybody give me an idea? is it possible?
    Thanks,
    Viswa

    I am trying the same. Here is URL which will help u.
    http://otn.oracle.com/sample_code/tech/java/jsp/samples/wsclient/Readme.html
    Let me know when you run servlet successfully.
    Regards
    Satish

  • How can I call external exe in java

    Hi ,
    Is It Possible to call external exe in java.
    I read Runtime.exe("some exe") but actually my exe expects some input to process for that how can i pass the input to my exe and how can get the response from exe to my java class.
    any sample code is welcome.
    Thanks
    Babu H

    example
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.io.*;
    public class RuntimeExample extends JFrame {
        private JTextArea textArea;
        private JTextField textField;
        private PrintWriter writer;
        public RuntimeExample()
            init();
            initProcess();
        public void init()
            textArea = new JTextArea(20, 80);
            textArea.setEditable(false);
            textField = new JTextField(30);
            textField.addKeyListener(new KeyAdapter()
                public void keyPressed(KeyEvent event) {
                    if (event.getKeyCode() == KeyEvent.VK_ENTER)
                        if (writer != null)
                            textArea.setText("");
                            writer.print(textField.getText() + "\r\n");
                            writer.flush();
                            textField.setText("");
            Container container = getContentPane();
            JScrollPane scrollPane = new JScrollPane();
            scrollPane.setViewportView(textArea);
            container.add(scrollPane, BorderLayout.CENTER);
            container.add(textField, BorderLayout.SOUTH);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            textField.grabFocus();
            setVisible(true);
        public static void main(String[] args) {
            new RuntimeExample();
        public void initProcess()
            Runtime rt = Runtime.getRuntime();
            try
                //Process p = rt.exec(new String [] {"cmd", "/C", textField.getText()});
                //textArea.setText("");
                //textField.setText("");
                Process p = rt.exec("cmd");
                writer = new PrintWriter(p.getOutputStream());
                Thread thread1 = new Thread(new StreamReader(p.getErrorStream()));
                Thread thread2 = new Thread(new StreamReader(p.getInputStream()));
                thread1.start();
                thread2.start();
                System.out.println("Exit Value = " + p.waitFor());
            catch (Exception ex)
                textArea.append(ex.getMessage());
                ex.printStackTrace();
        public class StreamReader implements Runnable
            InputStream is;
            public StreamReader(InputStream is)
                this.is = is;
            public void run()
                try
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    String data;
                    while ((data = reader.readLine()) != null)
                        textArea.append(data + "\n");
                    reader.close();
                catch (IOException ioEx)
                    ioEx.printStackTrace();
    }you can pass input to the exe by using getOutputStream() from Process and get the output from getInputStream() from Process

  • Calling external programs from within a Tomcat application

    I've got a fairly complex existing Tomcat application (which is packaged and built as a .war file) which I'm trying to edit so that it calls a Perl script part way through the processing, which will generate an XML file used later on. I think I've worked out how to call external scripts from within Java, but at the moment when I try and access the application via Tomcat the application either hangs or bails out (I don't know which, as the log files unhelpfully don't give any error messages).
    The code which is causing the problem looks like this:
    System.err.println("Calling runtime...");
    Runtime runtime = Runtime.getRuntime();
    System.err.println("Executing process...");
    Process process = runtime.exec("/path/to/ysearch.pl 'News' '\"search query\"' 'file");
    System.err.println("Waiting for process...");
    int exitVal = process.waitFor();
    System.out.println("Exited with error code: " + exitVal);The code gets as far as "Executing process..", beyond that there is nothing in the log file so I presume the runtime.exec() call is where the problem is. I'm not interested in reading the output from the script (there shouldn't be any), so that's not an issue, and the permissions on it allow anyone to read or execute ysearch.pl so I don't think there's a problem in that area.
    Does anyone have any suggestions which I could try to get this to work? I've only been using Tomcat for a week (I'm picking up on someone else's code) so I might have made a beginner's mistake. I'm using Tomcat 5 on Fedora Core 7, and Java 1.5.0_01 (I can't easily change any of those).

    I'm not sure, but I thing that overhead caused by calling du cannot be big enough to matter even on older machines.
    But, when calling du from Perl script you are also invoking shell, and this can be a little bit more 'heavy'.

  • UnsatisfiedLinkError while calling C library from Java Programm

    Hi,
    I am trying call C function from Java code but I am getting error.
    Below is the code
    package jnitest;
    class HelloWorld {
        private native void print();
        public static void main(String[] args) {
            new HelloWorld().print();
        static {
            System.loadLibrary("HelloWorld");
    }I used following commands to compile and generate header files
    $ javac -d build src/jnitest/HelloWorld.java
    $ javah -d build -classpath build -jni jnitest.HelloWorldThen jnitest_HelloWorld.h was generated and I renamed it to HelloWorld.h.
    I implemented HelloWorld.h in HelloWorld.c.
    Below is the code for both the files
    HelloWorld.h
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class jnitest_HelloWorld */
    #ifndef _Included_jnitest_HelloWorld
    #define _Included_jnitest_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    * Class:     jnitest_HelloWorld
    * Method:    print
    * Signature: ()V
    JNIEXPORT void JNICALL Java_jnitest_HelloWorld_print
      (JNIEnv *, jobject);
    #ifdef __cplusplus
    #endif
    #endifHelloWorld.c
    #include <jni.h>
    #include <stdio.h>
    #include "HelloWorld.h"
    JNIEXPORT void JNICALL
    Java_HelloWorld_print(JNIEnv *env, jobject obj)
      printf("Hello World!\n");
      return;
    }I used following commands to generate so file
    gcc -m32 -fPIC -D_REENTRANT -I/opt/jdk1.6.0_19/include -I/opt/jdk1.6.0_19/include/linux -c HelloWorld.c
    gcc -m32 -shared HelloWorld.o -o libHelloWorld.soafter all the execution I get following directory struct in build directory
    $ ls -R
    HelloWorld.c  HelloWorld.h  jnitest  libHelloWorld.so
    ./jnitest:
    HelloWorld.classI am executing following command to run the program.
    build$ java -D. jnitest.HelloWorldbut I am getting exception
    Exception in thread "main" java.lang.UnsatisfiedLinkError: jnitest.HelloWorld.print()V
         at jnitest.HelloWorld.print(Native Method)
         at jnitest.HelloWorld.main(HelloWorld.java:16)I pointed LD_LIBRARY_PATH to build directory and executed
    java -classpath build jnitest.HelloWorldbut I am still getting the same error.
    Please help to fix the issue.
    Thanks,

    The JNI method name in the .h file is different to that in the .c file.

  • Curious thing while calling a procedure from Java !...

    Hi !. My name is Agustin and my doubt would be the following one... I am working for a e-business comp and they asked me to call a procedure from java... The code is the following one:
    CallableStatement cs = null;
    System.out.println("Fecha Nro. 1: " + paramFechaDesde);
    System.out.println("Fecha Nro. 2: " + paramFechaHasta);
    try
    cs = getDBTransaction().createCallableStatement("{call paq_w_ListadoSiniestralidadART. p_sinsiniest(?,?,?,?) }",0);
    cs.registerOutParameter(4,OracleTypes.VARCHAR);
    cs.setInt(1,paramContrato.intValue());
    cs.setString(2,paramFechaDesde);
    cs.setString(3,paramFechaHasta);
    cs.setString(4,paramNombreArchivo);
    cs.executeQuery();
    String nomArchivo = cs.getString(4);
    System.out.println("### " + nomArchivo +" ###");
    catch(SQLException e)
    The weird thing is that, I was expecting a big big exception but the only thing I got is
    ### Error ###
    The String I am expecting is a file's name !; so I am a little bit confused...
    Also I didn't know where to post so If it's in the wrong category... I apologize !... If anyone need more details, I'll be checking out... The account I am working on is an Insurance company, who is the one who provide access to the DB and the procedures... So I can't check what's inside...

    Please provide your Java and OS versions, the JDBC jar file and the Oracle DB version being used when you post.
    >
    I was expecting a big big exception
    >
    Then why do you have an empty exception block? That just makes it disappear so you won't see one if it happens.
    And your code has
    cs.registerOutParameter(4,OracleTypes.VARCHAR);
    cs.setString(4,paramNombreArchivo);You use 'registerOutParameter' for an OUT parameter and the 'setXXX' methods for other parameters.
    Remove the 'setSTring' for the OUT parameter.
    Then as malcollmmc already said
    >
    Sounds like the PL/SQL is returning "Error" as the 4th parameter of the call
    >
    The actual value returned by PL/SQL is strictly determined by the PL/SQL code and Java and JDBC are not involved.
    Fix the code problems, retest, and folllowup with whoever wrote the code if it still returns ERROR.

  • Call .bat file from java code

    I need to call an application that uses a .bat file to execute from a java program. Is that possible?
    This is the .bat file:
    importcli.exe ciaf2735 C:\Importcli\files\SAI2735*.txt  
    importcli.exe ciaf2735 C:\Importcli\files\CI2735*.txt  
    importcli.exe ciaf2735 C:\Importcli\files\SC2735*.txt  
    importcli.exe db1800 C:\Importcli\files\*.mdb

    magaupe wrote:
    I need to call an application that uses a .bat file to execute from a java program. Is that possible?
    This is the .bat file:
    importcli.exe ciaf2735 C:\Importcli\files\SAI2735*.txt  
    importcli.exe ciaf2735 C:\Importcli\files\CI2735*.txt  
    importcli.exe ciaf2735 C:\Importcli\files\SC2735*.txt  
    importcli.exe db1800 C:\Importcli\files\*.mdb
    Hmmm, I wonder what would happen if there were a web search engine and you could research like this:
    [http://www.google.com/search?hl=en&q=call+.bat+file+from+java]

  • Problem when calling a report from java

    Hi all,
    i have created a report using ireport which contains arabic data.
    when i execute the report from ireport to generate a pdf file it works.
    however when i call this report from java i have an exception"
    Could not create the report Could not load the following font :
    pdfFontName : ARIAL.TTF
    pdfEncoding : Identity-H"
    the pdfFont i used it in ireport, also the pdfEncoding.
    did anyone passed with the same problem
    thanks for help

    Hello Oracle experts,
    The parameters are getting passed successfully in my report.
    But I want to know hous to use it in my query group.
    I just want the syntax.
    Thanks

  • Calling a servlet from java

    How to call a servlet from java?
    your help is greatly appreciated..

    Welcome to the forum
    You seem to be misunderstanding something. Do some googling to learn what you need about servlets. Simplified, servlets are java code that's hosted by a web container, such as Tomcat. When a servlet gets called as a consequence of someone requesting a url from the container, it takes in a request object and a response object. All the magic is then in creating an appropriate response (e.g. html) for the incoming request.

  • How to Call C++ Method from Java

    I need to call C++ method from Java.
    I have gone through the JNI tuorial , but was not able to pin point things.
    I read that :
    You have to write JNI c functions which then call your C++ member functions.You need to write a JNI function which will call new on your C++ class.
    Now i have java class :
    Java Code JavaClass.java ---->
    class JavaClass{
    public native void nativeMethod();
        static
            System.loadLibrary("NativeCppCode");
         private void callCppMethod()
              //call C++ method
                    JavaClass jvc = new JavaClass();
                    jvc.nativeMethod()
    }Cpp Code:
    NativeCppCode.h---->
    class NativeCppCode
    public:
        getValue();
        setValue();
    private:
       int a;
    JNIEXPORT void JNICALL Java_JavaClass_nativeMethod(JNIEnv *env
                   ,jobject obj);NativeCppCode.C---->
    NativeCppCode::getValue()
       return a;
    NativeCppCode::setValue()
       a = 1;
    JNIEXPORT void JNICALL Java_JavaClass_nativeMethod(JNIEnv *env
                   ,jobject obj)
    NativeCppCode* nativeInstabce = new NativeCppCode();
    NativeCppCode.setValue();
    }Is this the correct way to do it.
    Any suggestion would be a great help to me

    tryit wrote:
    I need to call C++ method from Java.Not possible.
    JNI uses C methods.
    Is this the correct way to do it.Same way you would do it in any C/C++ method (not java)
           MyClass* p = ....
           p->doit();
    Common idiom for the pointer in the above is to pass it back and forth to your java code as a java long. You cast it it and from your class pointer. Provide an explicit java method to free it when done. Besides providing the explicit method also implement a finalizer to free it as well (however that is a fail safe and should not be relied upon.)

  • How to call gnuplot command from java

    Hi there,
    In our course, we are required to develop an GUI for gnuplot. In case you don't know about gnuplot, it's a plotting program and has lots of command. We want to use java and swing, but now we don't know how to call gnuplot command from java, or how to execute a shell command(script) from java.
    By the way, since we need read in files with several columns of data and allow user to select a column, we want to use JTable. Is that reasonable?
    Thanks a lot for any suggestions!
    Jack

    Hi, there:
    Will using JTable add much overhead? I may have to use several JTables and switch among them. I can add scroll bar to or edit JTables, right?
    BTW, do you have experience about gnuplot? Can I find the command tree of gnuplot somewhere? Or do you know a better place to post question about gnuplot? unix/linux group, maybe.
    Thanks,
    Jack
    P.S. Would you guys answer my question after I use up my duke dollars? :- )

  • Is it possible to call ctx_doc.filter from Java?

    Hello all,
    Is it possible to call ctx_doc.filter from Java?
    If so, do you have a code sample?
    Thanks,
    Marvin

    I have some Java code using ctx_doc.markup that can help:
    try {
    //make db conn
    OracleCallableStatement stmt =(OracleCallableStatement)conn.prepareCall("begin "+
    "ctx_doc.markup(index_name=>'text_idx', "+
    "textkey=>?,"+
    "text_query=>?,"+
    "restab=>?,"+
    "starttag=> '<a>',"+
    "endtag=> '</a>' "+
    "); " +
    "end; ");
    ... // register other parameters
    stmt.registerOutParameter(3, OracleTypes.CLOB);
    stmt.execute();
    oracle.sql.CLOB text_clob=null;
    text_clob = ((OracleCallableStatement)stmt).getCLOB(3);
    // read the CLOB by chunks
    int chunk_size=text_clob.getChunkSize();
    Reader char_stream = text_clob.getCharacterStream();
    char[] char_array = new char[chunk_size];
    for(int n=char_stream.read(char_array);n>0; n=char_stream.read(char_array)){
    out.print(char_array);}
    }catch (SQLException e)

  • Calling ctx_doc.filter from java...is it possible?

    Hello all,
    Is it possible to call ctx_doc.filter from Java?
    If it is possible, does anyone have a code sample they can share?
    Thanks for the help,
    Marvin
    http://www.esenai.com

    I have some Java code using ctx_doc.markup that can help:
    try {
    //make db conn
    OracleCallableStatement stmt =(OracleCallableStatement)conn.prepareCall("begin "+
    "ctx_doc.markup(index_name=>'text_idx', "+
    "textkey=>?,"+
    "text_query=>?,"+
    "restab=>?,"+
    "starttag=> '<a>',"+
    "endtag=> '</a>' "+
    "); " +
    "end; ");
    ... // register other parameters
    stmt.registerOutParameter(3, OracleTypes.CLOB);
    stmt.execute();
    oracle.sql.CLOB text_clob=null;
    text_clob = ((OracleCallableStatement)stmt).getCLOB(3);
    // read the CLOB by chunks
    int chunk_size=text_clob.getChunkSize();
    Reader char_stream = text_clob.getCharacterStream();
    char[] char_array = new char[chunk_size];
    for(int n=char_stream.read(char_array);n>0; n=char_stream.read(char_array)){
    out.print(char_array);}
    }catch (SQLException e)

Maybe you are looking for

  • Oracle database 10.2.0.4 components

    Hi we got a request from client asking us to provide the below components related files in OS level....i mean in Oracle home....or some where else.... Oracle XDK 10.2.0.4.0 Oracle Database Java Packages 10.2.0.4.0 Could you please help me on this....

  • How do I set up a virtual server with a time capsule?

    I am trying to set up a wireless camera in my house to be viewed from away from the house. I cannot seem to figure out port forwarding/virtual serving on the settings of my time capsule. I had no issues doing it with my old router. Does time capsule

  • Binary data through WS and RFC scenario.

    Hi, Using SAP PI 7.30 duel stack. I have a Web Service to RFC pass-through scenario. The RFC input is an invoice number and a document return type. The RFC request fetches a PDF document (Type) and return the PDF document as a binary string in the re

  • Oracle 10g - Insert value into a self-created table in stored proc

    Hi all, Say I'm creating a table using the following logic, pc_create_table := 'create global temporary table revs(var1 number(5,0), ..., ...,) on commit preserve rows'; execute immediate pc_create_table; When I'm attempting to insert value into this

  • Copying from list to list

    I have a list List result = pm.select(SupremeApplicationElement.class, attName, args);I want to copy just the elements with "POP" in the description List pop_result = null; for(int k=0; k<result.size(); k++){