Rok
Rok

Reputation: 133

Reading file passed in cmd

i have problem which is probably easy but in can't figure it out. I'm writing simple java program called task1 to read a file and calculate some values. I run this program in cmd like this:

cmd: java task1 calculate

Word "calculate" after "task1" is an argument which start my method to calculate some values. But i would like to calculate some values in a file called values.txt. My problem is that i don't know how to write my code to that read file. This file is passed as argument in cmd like that:

cmd: java task1 calculate < values.txt

hope, you can understand my problem. It Would be awesome if you can just tell me how to print this values in my file

        if(args.length == 0)
        {
            System.out.println("Insert some arguments");
        }
        else if(args[0].equals("calculate"))
        {
            //here i would like to read my file (values.txt) 
        }

I appreciate your help and i am sorry for my bad English.

Upvotes: 1

Views: 148

Answers (2)

JosEduSol
JosEduSol

Reputation: 5456

You can try Files#readAllLines(). This will read a text file and store every line in a List collection:

//Path valuesPath = Paths.get("VALUES_DIR", "values.txt");
Path valuesPath = Paths.get("./" + args[0]);

try {
  List<String> lines = Files.readAllLines(valuesPath, Charset.defaultCharset()));

  for (String line : lines) {     //print lines (or do whatever you need)
    System.out.println(line);
  }
} catch (IOException e) {
   e.printStackTrace();
}

Where args[0] is the name of the file to read (on the same directory where the task1.jar is).

Call your java program as:

java -jar task1.jar values.txt

EDIT:

To read piped file as standard in:

BufferedReader in = null;
try {
    in = new BufferedReader(new InputStreamReader(System.in));
    String line;
    while ((line = in.readLine()) != null) {  //print lines (or do whatever you need)
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
} 

call your task as:

java task1 calculate < VALUES_PATH\values.txt

Where VALUES_PATH is the complete path where your file is.

Note that when you use < then you can't get back the command line in your own program.

Upvotes: 1

user4233758
user4233758

Reputation:

You should use buffered reader for that. When you do

cmd: java task1 calculate < values.txt

you pass the contents of values.txt in the program as standard input.

The code would look like this

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();

This way you read a line with BufferedReader.

For more please consult http://alvinalexander.com/java/java-bufferedreader-readline-string-examples

PS: It is also possible to directly read a file from disk, no need to pipe it to the program.

You do that like this:

BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));

Upvotes: 2

Related Questions