获取当前类名称,包括包

我正在一个项目上工作,一个要求是,如果主方法的第二个参数以'/'开头(对于linux),它应该把它看作一个绝对path(而不是一个问题),但是如果它不以'/',它应该得到类的当前工作path,并附加给它给定的参数。

我可以通过几种方式获得类名: System.getProperty("java.class.path")new File(".")getCanonicalPath()等等。

问题是,这只给了我的包存储目录 – 即如果我有一个类存储在“… /项目/这是/包/名称”,它只会给我“/项目/ “并忽略实际的.class文件所在的包名称。

有什么build议么?

编辑:这里的解释,从练习描述

sourcedir可以是绝对的(以“/”开头),也可以是相对于我们运行程序的地方

sourcedir是主要方法的一个给定的论据。 我怎么find这条路?

使用this.getClass().getCanonicalName()获取完整的类名。

请注意,包/类名(“abC”)与.class文件(a / b / C.class)的path不同,使用包名/类名来派生path通常是不好的做法。 类文件/包的集合可以在多个不同的类path中,可以是目录或jar文件。

有一个类, Class ,可以做到这一点:

 Class c = Class.forName("MyClass"); // if you want to specify a class Class c = this.getClass(); // if you want to use the current class System.out.println("Package: "+c.getPackage()+"\nClass: "+c.getSimpleName()+"\nFull Identifier: "+c.getName()); 

如果c表示包mypackage的类MyClass ,则上面的代码将打印:

包装:mypackage
类:MyClass
完整标识符:mypackage.MyClass

您可以获取这些信息并根据需要对其进行修改,或者查看API获取更多信息。

完全限定的名字是opatained如下:

 String fqn = YourClass.class.getName(); 

但是你需要读一个类path资源。 所以使用

 InputStream in = YourClass.getResourceAsStream("resource.txt");