How to get current class name including package name in Java?

La bla bla picture La bla bla · Mar 15, 2012 · Viewed 142.6k times · Source

I'm working on a project and one requirement is if the 2nd argument for the main method starts with “/” (for linux) it should consider it as an absolute path (not a problem), but if it doesn't start with “/”, it should get the current working path of the class and append to it the given argument.

I can get the class name in several ways: System.getProperty("java.class.path"), new File(".") and getCanonicalPath(), and so on...

The problem is, this only gives me the directory in which the packages are stored - i.e. if I have a class stored in ".../project/this/is/package/name", it would only give me "/project/" and ignores the package name where the actual .class files lives.

Any suggestions?

EDIT: Here's the explanation, taken from the exercise description

sourcedir can be either absolute (starting with “/”) or relative to where we run the program from

sourcedir is a given argument for the main method. how can I find that path?

Answer

The Nail picture The Nail · Mar 15, 2012

Use this.getClass().getCanonicalName() to get the full class name.

Note that a package / class name ("a.b.C") is different from the path of the .class files (a/b/C.class), and that using the package name / class name to derive a path is typically bad practice. Sets of class files / packages can be in multiple different class paths, which can be directories or jar files.