We'll cover two of the simplest ways of giving input to your programs: command line arguments and environment variables.
Command line arguments
Every program you run on the command line is given access to a list of everything that you type after the program name -- those are the command line arguments. Even if you don't run a program from the command line, there are ways of specifying the command line arguments; for an example in Windows, right-click on any program shortcut and view its properties to see what command line arguments are specified for it.
In Java, the command line arguments are accessed through the String[] args
array that you see in every program's public static void main(String[] args)
declaration. Here's a simple example that prints all the arguments labeled
by their index in the args
array:
public class Args {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println(i + ": " + args[i]);
}
}
}
Just in case you need a quick review of how to compile and run:
- Save the file to the directory you want to work in
- Open a command prompt and navigate to the directory using the
cd
command - Compile the file by running
javac Args.java
- Run the compiled class by running
java Args A B C ...
, whereA
,B
,C
, ... are your command line arguments.
Environment variables
Every program is also given a dictionary of named values called environment variables. When a process is created, it inherits its own copy of the environment variables from its parent. Environment variables provide a convenient way to provide sets of input values that will often remain the same when running several programs.
An important example on major operating systems is the PATH
variable, which
lists the directories that are searched for programs when you type a program
name on the command line.
In Windows, you can see the values of environment variables in a cmd
shell by
using the set
or echo
commands. set PATH
will display the value of the
PATH
variable (and any other variable whose name starts with "PATH"). echo
%PATH%
will print the value of just the PATH
variable. In general, echo
prints exactly what you type on the command line, with variables enclosed in %
filled in. Use the /?
flag to see more information: set /?
.
In Java, you can access environment variables through the
System.getenv
methods. Here's an example that prints out your
PATH
setting:
public class EnvPath {
public static void main(String[] args) {
System.out.println(System.getenv("PATH"));
}
}
Setting environment variables that are passed to new processes is also possible, but requires some more advanced concepts and classes. This example (in Windows) launches a new command line shell with some new environment variables set:
import java.io.IOException;
import java.util.Map;
public class EnvSet {
public static void main(String[] args) {
ProcessBuilder proc = new ProcessBuilder();
// Configure to start a new command shell
// with given command line arguments passed:
proc.command("cmd", "/c", "start");
// Modify environment to contain new variables:
Map<String, String> env = proc.environment();
env.put("MON", "Meatloaf");
env.put("TUES", "Taco");
env.put("WED", "Wienerschnitzel");
// Run the command, or report an error if it failed
try {
proc.start();
} catch (IOException ex) {
System.err.println("Error starting cmd:" + ex);
}
}
}
Homework 4
Write two Java programs that print Hello Joel!
, or whatever your name is.
The two versions should determine the name to print by:
- Using the value of the environment variable
USER
. - Using the first command line argument.
To submit, either do your work in your 185-hw
repository in a folder called
hw4
(and post to your BitBucket account when you're done), or email me your
.java
files at jal2016@email.vccs.edu with subject CSC 185 HW4.