Tuesday, January 17, 2012

java.net.ConnectException: Connection timed out: connect

 Exception in thread "main" java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.http.HttpClient.(HttpClient.java:233)
    at sun.net.www.http.HttpClient.New(HttpClient.java:306)
    at sun.net.www.http.HttpClient.New(HttpClient.java:323)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)



If you get above error, there could be one of the following reasons.
  • The domain/IP or port is incorrect
  • The domain/IP or port (i.e service) is down
  • The domain/IP is taking longer than your default timeout to respond
  • You have a firewall that is blocking requests or responses on whatever port you are using
  • You have a firewall that is blocking requests to that particular host
  • Your internet connection is down

I most of the cases there is a firewalls issue. Firewalls and port or IP blocking may be in place by your ISP.

To access URL via Firewalls, you may require to set http.proxyHost and http.proxyPort. Try using below syntax.

System.setProperty("http.proxyHost", "host name");
System.setProperty("http.proxyPort", "port number");

Some time you may also get below error.

Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.google.com
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313)

Here you may require to set User-Agent using below syntax.

connection.addRequestProperty("User-Agent", "Mozilla/4.0");

Please find the complete code below.


/* SimpleURLConnection.java */

import java.net.*;
import java.io.*;

public class SimpleURLConnection
{
    public static void main(String[] args) throws Exception
    {
        System.setProperty("http.proxyHost", "host name");
        System.setProperty("http.proxyPort", "port number");

        URL url= new URL("http://www.google.com");//provide proper url

        URLConnection connection = url.openConnection();
        connection.addRequestProperty("User-Agent", "Mozilla/4.0");

        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

        String line = "";

        while((line=in.readLine()) != null)
        {
            System.out.println(line);
        }

        //closing resource
        in.close();
        connection=null;
    }
}

Friday, January 13, 2012

Java : Compare two files

Other day I was required to compare contents of two files in Java. Lets see how to compare two txt files in Java?

I was wondering if there is a Java APIs for Text file comparison, which will compare contents of two txt files using java program.

Basically the java program should mimc the behaviour of diff command of LINUX. diff is a file comparison utility that outputs the differences between two files. It is typically used to show the changes between one version of a file and a former version of the same file. Diff displays the changes made per line for text files.

Output of the java program should give same as result produced by diff command. I got many codes on net but they were not working as expected. Latter i got an idea, why not we can use diff command in our java program to produce the same result. But diff command works for LINUX, what is equivalent for Windows? Well i found COMP or FC are equivalent windows command for diff in LINUX. So with the help of these commands we can build a JAVA program which will compare contents of two txt files.

Lets see the code.

No need to add any jar file, directly you can run this code and see the output.



/* CompareFiles.java */

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CompareFiles {

    public void compare(String file1,String file2) {
       
        //For Windows
        runSystemCommand("fc /N \""+file1+"\" \""+file2+"\"");
       
        //For UNIX / LINUX
        //runSystemCommand("diff "+file1+" "+file2);
    }
   
    public void runSystemCommand(String command) {
       
        try {
            Process proc = Runtime.getRuntime().exec(command);
          
            BufferedReader inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            BufferedReader errorStream = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
           
            String strLn = "";
           
            // reading output stream of the command
            while ((strLn = inputStream.readLine()) != null) {
                System.out.println(strLn);
            }
           
            // reading errors of the command (if any)
            while ((strLn = errorStream.readLine()) != null) {
                System.out.println(strLn);
            }
          
        } catch (Exception e) {
          
            e.printStackTrace();
        }
    }
   
    public static void main(String[] args) {
   
        CompareFiles cf = new CompareFiles();
       
        cf.compare("C:\\file1.txt","C:\\file2.txt");
    }

}

UNIX / LINUX - HELP diff Command

NAME
     diff - compare two files

SYNOPSIS
     diff [-bitw] [-c | -e | -f | -h | -n | -u]  file1 file2

     diff [-bitw] [-C number | -U number]  file1 file2

     diff [-bitw] [-D string] file1 file2

     diff [-bitw] [-c | -e | -f | -h | -n | -u]  [-l]  [-r]  [-s] [-S name] directory1 directory2

DESCRIPTION
     The diff utility will compare  the  contents  of  file1  and file2  and write to standard output a list of changes necessary to convert  file1  into  file2.  This  list  should  be minimal.   Except  in rare circumstances, diff finds a smallest sufficient set of file differences. No output  will  be produced if the files are identical.

     The normal output contains lines of these forms:

     n1 a n3,n4
     n1,n2 d n3
     n1,n2 c n3,n4

     where n1  and  n2  represent  lines  file1  and  n3  and  n4 represent lines in file2 These lines resemble ed(1) commands to convert file1 to file2. By exchanging a for d and reading backward, file2 can be converted to file1. As in ed, identical pairs, where n1=n2 or n3=n4, are abbreviated as a single number.

     Following each of these lines come all the  lines  that  are affected  in  the  first  file  flagged by `<', then all the lines that are affected in the second file flagged by `>'.

OPTIONS
     The following options are supported:

     -b              Ignores trailing blanks  (spaces  and  tabs) and   treats  other  strings  of  blanks  as equivalent.

     -i              Ignores the case of  letters.  For  example, 'A' will compare equal to 'a'.

     -t              Expands characters  in  output  lines. Normal or -c output adds character(s) to the front of each line that may adversely affect the indentation of the original source lines and  make  the  output  lines  difficult  to interpret.  This  option  will  preserve the original source's indentation.

     -w              Ignores all blanks ( and   characters)  and  treats  all  other  strings of blanks   as   equivalent.    For    example, 'if ( a == b )'   will   compare   equal  to 'if(a==b)'.

     The following options are mutually exclusive:

     -c              Produces a listing of differences with three lines  of  context. With this option, output format is modified slightly. That is, output begins  with  identification  of  the  files involved and their creation dates, then each change  is  separated by a line with a dozen *'s. The lines removed from file1 are marked with  '-'.  The  lines  added  to  file2 are marked '+'. Lines that are changed from  one file  to  the other are marked in both files with '!'.

     -C number       Produces a listing of differences  identical to  that produced by -c with number lines of context.

     -D string       Creates a merged version of file1 and  file2 with  C  preprocessor  controls  included so that a compilation  of  the  result  without defining  string  is equivalent to compiling file1,  while  defining  string  will  yield file2.

     -e              Produces a script of only a, c, and  d  commands for the editor ed, which will recreate file2 from file1. In connection with the  -e option, the following shell program may help maintain multiple versions of a  file.  Only an  ancestral  file  ($1)  and  a  chain  of version-to-version  ed  scripts  ($2,$3,...) made  by  diff  need  be on hand. A ``latest version'' appears on the standard output. (shift; cat $*; echo '1,$p') | ed - $1

     -f              Produces a similar script, not  useful  with ed, in the opposite order.

     -h              Does a fast, half-hearted job. It works only when  changed  stretches  are short and well separated, but does work on files of  unlimited length. Options -c, -C, -D, -e, -f, and -n are unavailable with -h.  diff  does  not descend into directories with this option.

     -n              Produces a script similar to -e, but in  the opposite  order  and with a count of changed lines on each insert or delete command.

     -u              Produces a listing of differences with three lines  of  context. The output is similar to that of the -c option, except that the  context is "unified". Removed and changed lines in file1 are marked by  a  '-'  while  lines added  or  changed  in file2 are marked by a '+'. Both versions of changed  lines  appear in  the  output,  while  added, removed, and context lines appear only once. The identification  of  file1  and  file2 is different, with "---" and  "+++"  being  printed  where "***"  and  "---"  would  appear with the -c option. Each change is separated by  a  line of the form @@ -n1,n2 +n3,n4 @@

     -U number       Produces a listing of differences  identical to  that produced by -u with number lines of context.

     The following options are used for comparing directories:

     -l              Produces output in long format.  Before  the diff,  each text file is piped through pr(1) to  paginate  it.   Other  differences   are remembered  and  summarized  after  all text file differences are reported.

     -r              Applies diff recursively to common subdirectories encountered.

     -s              Reports  files  that  are  identical.  These identical  files would not otherwise be mentioned.

     -S name         Starts  a  directory  diff  in  the  middle, beginning with the file name.

OPERANDS
     The following operands are supported:

     file1           A path name of a file  or  directory  to  be
     file2           compared. If either file1 or file2 is -, the standard input will be used in its place.

     directory1      A path name of a directory to be compared.
     directory2

     If only one of file1 and file2 is a directory, diff will  be applied  to the non-directory file and the file contained in the directory file with a filename that is the same  as  the last component of the non-directory file.

USAGE
     See largefile(5) for the description of the behavior of diff  when encountering files greater than or equal to 2 Gbyte ( 2     **31 bytes).

EXAMPLES
     Example 1: Typical output of the diff command

     In the following command, dir1 is a directory  containing  a directory  named  x, dir2 is a directory containing a directory named x, dir1/x and dir2/x  both  contain  files  named date.out, and dir2/x contains a file named y:

     example% diff -r dir1 dir2
     Common subdirectories: dir1/x and dir2/x

     Only in dir2/x: y

     diff -r dir1/x/date.out dir2/x/date.out

     1c1

     < Mon Jul  2 13:12:16 PDT 1990

     ---

     > Tue Jun 19 21:41:39 PDT 1990

ENVIRONMENT VARIABLES
     See environ(5) for descriptions of the following environment variables  that  affect the execution of diff: LANG, LC_ALL, LC_CTYPE, LC_MESSAGES, LC_TIME, and NLSPATH.

     TZ       Determines the locale for  affecting  the  timezone used  for  calculating file timestamps written with the -C and -c options.

EXIT STATUS
     The following exit values are returned:

     0        No differences were found.

     1        Differences were found.

     >1       An error occurred.

FILES
     /tmp/d?????             temporary file used for comparison

     /usr/lib/diffh          executable file for -h option

ATTRIBUTES
     See attributes(5) for descriptions of the  following  attributes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Availability                | SUNWesu                     |
    |_____________________________|_____________________________|
    | CSI                         | Enabled                     |
    |_____________________________|_____________________________|
    | Interface Stability         | Standard                    |
    |_____________________________|_____________________________|

SEE ALSO
     bdiff(1), cmp(1), comm(1), dircmp(1), ed(1),  pr(1),  sdiff(1), attributes(5), environ(5), largefile(5), standards(5)

NOTES
     Editing scripts produced under the  -e  or  -f  options  are naive  about  creating  lines  consisting of a single period (.).

     Missing NEWLINE at end of file indicates that the last  line of the file in question did not have a NEWLINE. If the lines are different, they will be flagged and output, although the output will seem to indicate they are the same.    

COMP and FC : Windows equivalent of UNIX / LINUX diff command

COMP and FC commands can be used as Windows equivalent of UNIX / LINUX diff command.

COMP

Compares the contents of two files or sets of files.

SYNTAX :
COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]]

  data1      Specifies location and name(s) of first file(s) to compare.
  data2      Specifies location and name(s) of second files to compare.
  /D         Displays differences in decimal format.
  /A         Displays differences in ASCII characters.
  /L         Displays line numbers for differences.
  /N=number  Compares only the first specified number of lines in each file.
  /C         Disregards case of ASCII letters when comparing files.
  /OFF[LINE] Do not skip files with offline attribute set.

To compare sets of files, use wildcards in data1 and data2 parameters.

FC

Compares two files or sets of files and displays the differences between them

SYNTAX:
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]
   [drive1:][path1]filename1 [drive2:][path2]filename2
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

  /A         Displays only first and last lines for each set of differences.
  /B         Performs a binary comparison.
  /C         Disregards the case of letters.
  /L         Compares files as ASCII text.
  /LBn       Sets the maximum consecutive mismatches to the specified
             number of lines.
  /N         Displays the line numbers on an ASCII comparison.
  /OFF[LINE] Do not skip files with offline attribute set.
  /T         Does not expand tabs to spaces.
  /U         Compare files as UNICODE text files.
  /W         Compresses white space (tabs and spaces) for comparison.
  /nnnn      Specifies the number of consecutive lines that must match
             after a mismatch.
  [drive1:][path1]filename1
             Specifies the first file or set of files to compare.
  [drive2:][path2]filename2
             Specifies the second file or set of files to compare.

Monday, January 9, 2012

Java : Simple LDAP program

This is a simple LDAP program in java. Here we are using Netscape Directory SDK.To know more about Mozilla Netscape click here. To run this program you need to download ldapsdk.jar For Example ldapsdk-4.1.jar

To download ldapsdk-4.1.jar, click here. Provide appropriate data and see the output.


/* TestLDAP.java */

import java.util.Enumeration;

import netscape.ldap.LDAPAttribute;
import netscape.ldap.LDAPAttributeSet;
import netscape.ldap.LDAPConnection;
import netscape.ldap.LDAPEntry;
import netscape.ldap.LDAPException;
import netscape.ldap.LDAPSearchResults;

public class TestLDAP {

    public static void main(String[] args) {
       
        LDAPConnection ldConnection = null;
        LDAPEntry ldEntry = null;
       
        try {
            ldConnection = new LDAPConnection();
           
            String HOSTNAME = "HOSTNAME";
            int PORT = 389;
            String TREEBASE = "ou=PEOPLE,o=ha";//your DN
            //String QUERY = "(objectclass=* )";
            String QUERY = "(&(objectclass=objclass )(attribute=*value*))";
           
            ldConnection.connect( HOSTNAME, PORT );
           
            //String[] attrNames = {"*"};
            String[] attributeNames = {"val1","val2","val3","val4"};
           
            LDAPSearchResults ldSearchResult = ldConnection.search(TREEBASE,LDAPConnection.SCOPE_ONE,QUERY,attributeNames,false);
           
            if(ldSearchResult.hasMoreElements()) {
                ldEntry = ldSearchResult.next();
            }
           
            LDAPAttributeSet ldAttributeSet = ldEntry.getAttributeSet();
           
            Enumeration enumAttributeSet = ldAttributeSet.getAttributes();
           
            while(enumAttributeSet.hasMoreElements()) {
                LDAPAttribute ldAttribute = enumAttributeSet.nextElement();
                String attrName = ldAttribute.getName();
               
                String[] aVal = ldAttribute.getStringValueArray();
               
                System.out.println("----------------------");
                System.out.println("Key   : "+attrName);
                for(String val : aVal) {
                    System.out.println("Value : "+val);
                }
               
            }
        }
        catch(LDAPException LDAPex) {
            LDAPex.printStackTrace();
        }

    }

}