Solved

how to invoke a Tagsoup from a java code???

Posted on 2007-04-01
20
376 Views
Last Modified: 2012-06-27
hi,
I want to excute this command from the command promt
java -jar tagsoup-1.0.4.jar http://moneycentral.msn.com/detail/stock_quote?Symbol=ca"; > ca.xml
into  my java code
package com.psol.xbe2;

import java.io.*;

public class Final
   
{
    public static void main (String args[]) throws IOException
           {
       
        String ur="http://moneycentral.msn.com/detail/stock_quote?Symbol=";
        BufferedReader in = new BufferedReader(new FileReader("ex1.txt"));
        String str;
        while ((str = in.readLine()) != null)
        {
             System.out.println(ur=ur+str);
           // I want to invoke java -jar tagsoup-1.0.4.jar http://moneycentral.msn.com/detail/stock_quote?Symbol=ca"; > ca.xml
        }
        in.close();
        }    
}
0
Comment
Question by:badour_ma
  • 9
  • 6
  • 5
20 Comments
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18832235
0
 

Author Comment

by:badour_ma
ID: 18832295
thanks MArk,
but I have error:
com\psol\xbe2\Final.java:21: cannot resolve symbol
symbol  : method exec (java.lang.String)
location: class java.lang.System
            System.exec("java -jar tagsoup-1.0.4.jar"+ url+" > ca.xml");
                  ^

package com.psol.xbe2;

import java.io.*;
import java.util.*;
import java.lang.*;

public class Final
{
    private final static String file = "ex1.txt";
    private final static String base = "http://moneycentral.msn.com/detail/stock_quote?Symbol=";

    public static void main(String[] args)
        throws IOException
    {
        String symbol;
        BufferedReader in = new BufferedReader(new FileReader(file));
        while((symbol = in.readLine()) != null)
        {
            String url = base + symbol;
            System.out.println(url);
            System.exec("java -jar tagsoup-1.0.4.jar"+ url+" > ca.xml");

        }
            in.close();
    }
}
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 18832399
Its Runtime.getRuntime ().exec ()

And you might want to store the command "java -jar ...." in a properties file and load it from there, so that you can keep changing it on runtime without modifying your source code.
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 18832401
>> in.close();

Put that in a finally block.
0
 

Author Comment

by:badour_ma
ID: 18832450
the error fixed but
      Runtime.getRuntime ().exec("java -jar tagsoup-1.0.4.jar"+ url+" > ca.xml");
not excuted!!!
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 18832468
Where is the JAR file located? Is it in the same directory from where this class file is being run?
0
 

Author Comment

by:badour_ma
ID: 18832477
yes!!
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 18832559
What is the output you get?
0
 

Author Comment

by:badour_ma
ID: 18832572
0
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18832664
use --files flag instead of the >.

java -jar tagsoup-1.0.4.jar --files http://moneycentral.msn.com/detail/stock_quote?Symbol=ca"
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:badour_ma
ID: 18832680
I should output the reselt to ca.xml
0
 

Author Comment

by:badour_ma
ID: 18832688
also java -jar tagsoup-1.0.4.jar --files http://moneycentral.msn.com/detail/stock_quote?Symbol=ca" did not work
0
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18832690
I am unfamiliar with tagsoup, but you can also redirect the standard output:

System.setOut( ... );

http://www.jcreator.com/forums/index.php?showtopic=773
0
 

Author Comment

by:badour_ma
ID: 18832763
I tried to use it but I had the following error

com\psol\xbe2\TextAreaOutputStream.java:54: <identifier> expected
System.setOut( out );
             ^
com\psol\xbe2\TextAreaOutputStream.java:57: <identifier> expected
System.setErr( out );
             ^
com\psol\xbe2\TextAreaOutputStream.java:60: <identifier> expected
System.out.println( "Hello World" );
                  ^
3 errors

/*
*
*
* @(#) TextAreaOutputStream.java
*
*/

import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JTextArea;

/**
* An output stream that writes its output to a javax.swing.JTextArea
* control.
*
* @author  Ranganath Kini
* @see      javax.swing.JTextArea
*/
public class TextAreaOutputStream extends OutputStream {
    private JTextArea textControl;
   
    /**
     * Creates a new instance of TextAreaOutputStream which writes
     * to the specified instance of javax.swing.JTextArea control.
     *
     * @param control   A reference to the javax.swing.JTextArea
     *                  control to which the output must be redirected
     *                  to.
     */
    public TextAreaOutputStream( JTextArea control ) {
        textControl = control;
    }
   
    /**
     * Writes the specified byte as a character to the
     * javax.swing.JTextArea.
     *
     * @param   b   The byte to be written as character to the
     *              JTextArea.
     */
    public void write( int b ) throws IOException {
        // append the data as characters to the JTextArea control
        textControl.append( String.valueOf( ( char )b ) );
    }  
 
// Create an instance of javax.swing.JTextArea control
JTextArea txtConsole = new JTextArea();

// Now create a new TextAreaOutputStream to write to our JTextArea control and wrap a
// PrintStream around it to support the println/printf methods.
PrintStream out = new PrintStream( new TextAreaOutputStream( txtConsole ) );
 

// redirect standard output stream to the TextAreaOutputStream
System.setOut( out );

// redirect standard error stream to the TextAreaOutputStream
System.setErr( out );

// now test the mechanism
System.out.println( "Hello World" );

}
0
 
LVL 10

Accepted Solution

by:
ADSLMark earned 500 total points
ID: 18832866
package com.psol.xbe2;

import java.io.*;
import java.util.*;
import java.lang.*;

public class Final
{
    private final static String file = "ex1.txt";
    private final static String base = "http://moneycentral.msn.com/detail/stock_quote?Symbol=";

    public static void main(String[] args)
        throws IOException
    {
        //Read stock symbols
        String symbol;
        BufferedReader in = new BufferedReader(new FileReader(file));

        while((symbol = in.readLine()) != null)
        {
            //Create url
            String url = base + symbol;
            System.out.println(url);

            //Redirect standard output, execute tagsoup and restore standard output
            Process p = Runtime.getRuntime().exec("java -jar tagsoup-1.1.jar "+url);
            InputStream std = p.getInputStream();
            FileOutputStream out = new FileOutputStream(symbol+".xml");

            boolean done = false;
            while(!done)
            {
                try
                {
                    p.exitValue();
                    done = true;
                }
                catch(IllegalThreadStateException itse)
                {
                    try { Thread.sleep(20); } catch(InterruptedException ie) {}
                }

                // Do whatever you want with the output
                while (std.available() > 0)
                    out.write(std.read());
            }
        }

        in.close();
    }
}
0
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18832886
Don't forget to correct the version number of the tag-soup jar.
Mark
0
 

Author Comment

by:badour_ma
ID: 18833144
Thanks aloooooot Mark :-)
0
 
LVL 30

Expert Comment

by:Mayank S
ID: 18833162
So no points for telling Runtime.getRuntime ()....
0
 

Author Comment

by:badour_ma
ID: 18837832
Hi Mark,
Can u please explain why you do this

boolean done = false;
            while(!done)
            {
                try
                {
                    p.exitValue();
                    done = true;
                }
                catch(IllegalThreadStateException itse)
                {
                    try { Thread.sleep(20); } catch(InterruptedException ie) {}
                }

                // Do whatever you want with the output
                while (std.available() > 0)
                    out.write(std.read());
            }
        }

0
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18839102
Keeps the stream from the tagsoup streaming to the file, until the process is finished.

Mark
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
If you haven’t already, I encourage you to read the first article (http://www.experts-exchange.com/articles/18680/An-Introduction-to-R-Programming-and-R-Studio.html) in my series to gain a basic foundation of R and R Studio.  You will also find the …
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now