Thursday 3 October 2013

System Utility : TAIL : Java

Objective :
Syntax: tail [-n] filename.ext 
This Program will print the last n lines of the Specified file. If the switch n is omitted, it will show the last 10 lines. If the file contains less, It Shows the Full Content. The Program here has been done by first reading the number of lines and then skipping lines which are not to be printed. The other way around would be to use a circular link list of size n but this process is faster as it doesn't stores the lines extracted by the file reader object.

BlueJ Program Screenshot :




Java Program Source Code :

/**
 * < Syntax: [-h] filename.ext > will print the last n lines of the Specified file.
 * If the switch n is omitted, it will show the last 10 lines. If the file contains less,
 * It Shows the Full Content.
 * Author SHANTANU KHAN
 * Date   26/06/2012
 */
import java.io.*;
public class tail
{
    // INSTANCE VARIABLES
    private int lines,present; // FILE SIZE AND EXISTING NO. OF LINES
    private String file;    // FILE NAME OR LOCATION TO BE READ
    public tail(String file){ // CONSTRUCTOR
        this.file=file;
        present=countLines(file); // COUNTS THE NO. OF LINES PRESENT IN THE FILE.
        lines=10; // DEFAULT NO. OF LINES
    }
    public tail(String file,int printLines){ // CONSTRUCTOR
        this.file=file;
        present=countLines(file);
        lines=printLines;
    }
    
    public static int countLines(String file){ // COUNT AND RETURN THE NUMBER OF LINES
        try{
            BufferedReader rFile=new BufferedReader(new FileReader(file));
            int count=0; String s;
            while(rFile.readLine()!=null) // READING THE FILE LINE-WISE
                count++; // INCREMENTING COUNTER
            rFile.close();  return count;
        }
        catch(Exception E){
            System.out.println("\nFile Not Found or UnReadAble.\n"+E);
            System.exit(-1); return -1; // RETURN STATEMENT NECESSARY
        }
    }
    
    private void printLine(){ // PRINT THE DATA IN THE SPECIFIED FILE
        int skip=0; // DEFAULT IF LINES >=AVAILABLE, SKIPS NOTHING
        if(lines<0){ // IF PARAMETER WITH SWITCH HAS NEGATIVE NUMBER : --23 TEST.TXT
            System.out.println("Error : Parameter Was Below Minimum Limit Of 0.");
            System.exit(-1);    } // EXITS IF n NEGATIVE
        else if(lines<present)
            skip=present-lines; // WILL SKIP PRINTING OF THE LINES
        try{ // EXCEPTION MAY BE THROWN IN RARE CASES, ALREADY FILE CHECKED DURING COUNT LINES
            BufferedReader rFile=new BufferedReader(new FileReader(file));
            String s;
            while(skip-->0) // READING THE FILE LINE-WISE
                s=rFile.readLine();
            while((s=rFile.readLine())!=null) // READING THE FILE LINE-WISE
                System.out.println(s);
            rFile.close();
        }
        catch(Exception E){;}
    }
    
    public static void main(String[] args){
        if(args.length==0){
            System.out.println("\nSyntax : tail [-n] fileName.ext\nn = Number of Lines to Print."); 
            System.exit(-1); // STOP EXECUTION
        }
        if(args.length==1){ // 1 PARAMETER PROVIDED 
            if(args[0].charAt(0)=='-'){ // ONLY SWITCH PROVIDED AS INPUT
                System.out.println("\nFileName Missing in Parameter.\nSyntax : tail [-n] fileName.ext\nn = Number of Lines to Print.");
                System.exit(-1); // STOP EXECUTION
            }
            else{ // ONLY FILENAME PROVIDED IN PARAMETER
                System.out.println("\nFile Accessed : "+args[0]+"\n");
                tail obj=new tail(args[0]);
                obj.printLine();
            }
        }
        else if(args.length>=2){
            if(args.length>2)
                System.out.println("\nExcess Parameters Will Be Ignored.");
            if(args[0].charAt(0)=='-'){
                int n=Integer.parseInt(args[0].substring(1));
                System.out.println("\nFile Accessed : "+args[1]+"\n");
                tail obj=new tail(args[1],n);
                obj.printLine();
            }
            else{
                System.out.println("\nFile Accessed : "+args[0]+"\n");
                tail obj=new tail(args[0]);
                obj.printLine();

No comments:

Post a Comment