Reputation: 189626
I have a .jar file I'm putting together. I want to create a really really simple .properties file with configurable things like the user's name & other stuff, so that they can hand-edit rather than my having to include a GUI editor.
What I'd like to do is to be able to search, in this order:
args[0]
)I know how to access #1 and #3 (I think), but how can I determine at runtime #2 and #4?
Upvotes: 14
Views: 23072
Reputation: 269627
#2 is the "user.dir" system property. #3 is the "user.home" property.
#4 is a bit of a kludge no matter how you approach it. Here's an alternate technique that works if you have a class loaded from a JAR not on the system classpath.
CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
URL url = new URL(src.getLocation(), "MyApp.properties");
...
}
else {
/* Fail... */
}
Upvotes: 6
Reputation: 5431
For 4, you could try this. Get the classpath:
String classpath = System.getProperty("java.class.path");
Then search it for the name of your application jar:
int jarPos = classpath.indexOf("application.jar");
Parse out the path leading up to it:
int jarPathPos = classpath.lastIndexOf(File.pathSeparatorChar, jarPos) + 1;
String path = classpath.substring(jarPathPos, jarPos);
Then append MyApp.properties
. Make sure to check for jarPos == -1
, meaning the jar isn't found if the classpath (perhaps when running in your dev environment).
Upvotes: 10
Reputation: 2541
For the current working directory:
new File(".");
For a file named MyApp.properties in the current directory:
new File(new File("."), "MyApp.properties");
Upvotes: 6