I have been working with buffering a file on my local drive to parse and obtain certain data. For test purposes I was easily able to do it this way:
public static void main(String[] args) {
fileReader fr = new fileReader();
getList lists = new getList();
File CP_file = new File("C:/Users/XYZ/workspace/Customer_Product_info.txt");
int count = fr.fileSizeInLines(CP_file);
System.out.println("Total number of lines in the file are: "+count);
List<String> lines = fr.strReader(CP_file);
....
}
}
fileReader.java file has the following function:
public List<String> strReader (File in)
{
List<String> totLines = new ArrayList<String>();
try
{
BufferedReader br = new BufferedReader(new FileReader(in));
String line;
while ((line = br.readLine()) != null)
{
totLines.add(line);
}
br.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//String result = null;
return totLines;
}
Now I want the file path to be passed as a Command line Argument instead. I tried a few things but I am kind of new to this and wasnt able to make it work. Can someone please help and explain what all changes I need to make in order to incorporate that change in my code.
Your problem has two sides: how to pass the parameter from the command line, and how to read it inside your code.
All arguments meant for the actual Java class and not for the JVM, should be put after the class name, like this:
C:\YOUR\WORKSPACE> java your.package.YouMainClass "C:\Users\XYZ\workspace\Customer_Product_info.txt"`
Things to watch out for:
/
vs backslashes \
: since you're on a Windows system, I'd rather use backslashes for your path, specially if you are including the drive letter. Java can work with both variants, but it's better to follow your SO conventions."
to allow for spaces: you'll need to enclose your path in double quotes if any directories contain spaces in their names, so just double quote it every time."C:\My path\XYZ\"
, the last double quote will be included as part of the path, because of the previous backslash escaping it \"
. Instead, "C:\My path\XYZ"
will do fine.main(String[])
methodNow this one is simple: as others have pointed out, the String with your path should now be in args[0]
:
public static void main(String[] args) {
fileReader fr = new fileReader();
getList lists = new getList();
if (args[0] == null || args[0].trim().isEmpty()) {
System.out.println("You need to specify a path!");
return;
} else {
File CP_file = new File(args[0]);
int count = fr.fileSizeInLines(CP_file);
System.out.println("Total number of lines in the file are: "+count);
List<String> lines = fr.strReader(CP_file);
....
}
}
I added some null-checking to avoid problems like the ArrayIndexOutOfBounds
you run into.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With