bencho bencho - 5 months ago 17
Java Question

Java: Passing file name and string to the command line

I have a small Java program where I'm trying to pass a text file and one or more strings separated by white spaces at the command line. Inside the text file, I have a list of packages as follows:

gui -> awtui swingui swingui -> runner extensions textui -> runner
framework awtui -> runner runner -> framework extensions -> framework


Now in my java, I want to list each package and its dependencies by passing the text file and package ame at the commandline as follows:

$ java PackageList sample.txt gui swingui


When I press enter, I would like to list each package as follows at the console:

gui -> awtui swingui
swingui -> runner extensions


As you can see, the rest of packages should not appear in the output if they are not passed at the command line as arguments.

Here's my Java code which wish is currently printing all the contents of the file regardless of the command line arguments after file name:

public class PackageList {

public static void main(String[] args) {

File inputFile = null;
if (args.length > 0) {
inputFile = new File(args[0]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit(1);
}

BufferedReader br = null;

try {
String sCurrentLine;
br = new BufferedReader(new FileReader(inputFile));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}

} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}
}

Answer

Check below code and comments:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class PackageList {

    public static void main(String[] args) {

        File inputFile = null;
        if (args.length > 0) {
            inputFile = new File(args[0]);
        } else {
            System.err.println("Invalid arguments count:" + args.length);
            System.exit(1);
        }

        BufferedReader br = null;

        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader(inputFile));
            for(int i=1; i < args.length;i++){  // For loop to  check - args[0] is file name so i = 1 
                boolean isDependencyExist = false; // check dependency
                while ((sCurrentLine = br.readLine()) != null) {
                    if(sCurrentLine.startsWith(args[i])){ // If file line starts with arg print
                        System.out.println(sCurrentLine);
                        isDependencyExist = true;
                        break;
                    }
                }
            if(!isDependencyExist){
                System.out.println(args[i] + " ->");
            }
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}