views:

9763

answers:

3

I'm trying to read variables from a batch file for later use in the batch script, which is a Java launcher. I'd ideally like to have the same format for the settings file on all platforms (Unix, Windows), and also be a valid Java Properties file. That is, it should look like this:

setting1=Value1
setting2=Value2
...

Is it possible to read such values like you would in a Unix shell script? The could should look something like this:

READ settingsfile.xy
java -Dsetting1=%setting1% ...

I know that this is probably possible with SET setting1=Value1, but I'd really rather have the same file format for the settings on all platforms.

To clarify: I need to do this in the command line/batch environment as I also need to set parameters that cannot be altered from within the JVM, like -Xmx or -classpath.

+1  A: 

You can pass the property file as a parameter to a Java program (that may launch the main program later on). And then benefit from the multi platform paradigm.

call me Steve
Yes, that's generally true, but I need to configure stuff like -Xmx too, which of course cannot be changed once the JVM is running.
Martin Probst
Oh I see, it's sounds overkill compare to the solutions but you may re-launch the Java from another Java. Don't get my wrong I do prefer the selected solution.
call me Steve
+11  A: 

You can do this in a batch file as follows:

setlocal
FOR /F "tokens=*" %%i in ('type Settings.txt') do SET %%i
java -Dsetting1=%setting1% ...
endlocal

This reads a text file containing strings like "SETTING1=VALUE1" and calls SET to set them as environment variables.

setlocal/endlocal are used to limit the scope of the environment variables to the execution of your batch file.

The CMD Command Processor is actually quite powerful, though with a rather byzantine syntax.

Joe
A: 

You can also access the OS' environment variables from within a Java program:

import java.util.Map;

public class EnvMap {
    public static void main (String[] args) {
        Map<String, String> env = System.getenv();
        for (String envName : env.keySet()) {
            System.out.format("%s=%s%n", envName, env.get(envName));
        }
    }
}
micro