Retrieving Files Recursively in Java

Sometimes I need to read recursively all the files from a directory. I kept using DirectoryScanner class from the Apache(located in ant.jar in my case). It has the advantage that it can filter through files based on the well-known asterisk matching. Recently I had to look-up in a directory containing lots and lots of files and it proved DirectoryScanner tended to be quite slow. So I used plain java for that(using java.io.File and java.io.FilenameFilter classes), for 2 reasons. First is that the speed can be improved quite easy. The second reason is that reporting progress in command line give the impression it takes less time.
Continue reading

Getting sun.security.provider.certpath. SunCertPathBuilderException when sending mail from Java via SSL?

Do you get sun.security.provider.certpath. SunCertPathBuilderException: unable to find valid certification path to requested target when you try to send a mail from java via smtp(TLS and SSL)? There are 2 possible problems:

  • One option could be from the antivirus/firewall which prevent the communication for a specific port(default 465 for SSL and 587 for TSL) or for the java.exe. In the case you have a recent JDK/JRE and you use a well-known service this is probably the problem. Just try to disable the antivirus and to send again the mail from java. If it doesn’t work check the next point
  • You have an invalid/expired certificate for the email server so the SSL/TLS authentication doesn’t work properly. In order to overcome this you have to install the valid certificate.
  • Continue reading

    How To Use JDBC addBatch Method with MySQL for Improved Performance

    When you have to deal with a large amount of data to be operated on mySQL databases, the performance can be dramatically improved using a few simple tweaks.

    First of all you have to use Statement.addBatch/executeBatch instead of simple execute methods. For each added batch, the jdbc driver will store in local memory and when the executeBatch is invoked, all the batches are sent at once to the database. This will result in an huge speed improvement.
    Continue reading

    How To Download a File in Java

    Here is a snippet that shows how to download a file in java. The snippet is tested and works just fine:

    
    	static public void download(String address, String localFileName) 
    											throws MalformedURLException
    												 , FileNotFoundException
    												 , IOException
    	{
    		
    
    		URL url = new URL(address);
    		
    		OutputStream out = new BufferedOutputStream(
    								new FileOutputStream(localFileName));
    		URLConnection conn = url.openConnection();
    		InputStream in = conn.getInputStream();
    
    		byte[] buffer = new byte[1024];
    		int numRead;
    		int progress = 0;
    		while ((numRead = in.read(buffer)) != -1) {
    			out.write(buffer, 0, numRead);
    			progress += 1024;
    			System.out.print("\r" + (int)(progress / 1000)+ "kb");
    		}            
    
    		in.close();
    		out.close();
    	}
    

    How to use Post Method using Apache HttpClient 4

    HttpClient is an apache java library that can be used to read pages over http. It can be used mainly for webpages and provide a well defined API that can handle Cookies, Sessions,… It offers support for both Get and Post methods, so it’s very useful for writing http java clients that can login and perform different actions on webpages.

    Starting with the version 4 the classes were drastically changed. Old tutorials don’t works anymore and the class names and methods were changed to some degree which makes old code pretty useless if you want to switch to a version 4.
    Continue reading

    How to Convert InputStream to String

    Sometimes I feel there are too many classes in java to work with streams and files. InputStream is the base class of all the classes in Java IO API. The input stream class is intended to be used to read the data from different sources in chunks. This is useful for large streams that don’t fit in memory.

    Lots of libraries returns objects of type InputStream and sometimes you know the stream small and you just need the data as a simple String. Here is the snippet written as a static method to transfer the data from a InputStream to a String.
    Continue reading

    Method Chaining

    Method chaining is a simple programming technique that can be implemented in almost any programming language. In simple words, it means that a method performs some operations on “this” object and then returns it so it can be used further more. It allows us to invoke several methods one after another, on one or different objects, usually written in the same line.

    For example we can build a rectangle class using using the Method Chaining for setters. You can see the setters are a little bit different than regular setters:

    class ChainedRectangle
    {
        protected int x;
        public ChainedRectangle setX(int x) { this.x = x; return this; }
    
        protected int y;
        public ChainedRectangle setY(int y) { this.y = y; return this; }
    
        protected int width;
        public ChainedRectangle setWidth(int width) { this.width = width; return this; }
    
        protected int height;
        public ChainedRectangle setHeight(int height) { this.height = height; return this; }
    
        protected String color;
        public ChainedRectangle setColor(String color) { this.color = color; return this; }
    }
    

    Then if we need to build a rectangle we can write a single line for setting all the required values:

    new         Rectangle().setX(10).setY(10).setWidth(13).setHeight(15).setColor("red");

    Along with autocomplete option in most of todays IDEs method chaining might provide a suggestive way of doing some actions in less code.
    Continue reading

    Using VBS to set the environment variables

    I use windows and I hate when I have to switch on another computer, or when I have to do any change related to windows especially changing the environment variables. I like to download the tool, framework, … I use as a zip and then to do minimal operations to install it. The thing I hate the most is setting environment variables, and path in that small dialog window. I have all my java applications and frameworks in one single directory so the configuration depends only on the thing I hate most: thats right, environment variables.
    Continue reading