我正在研究一个项目,一个要求是如果main方法的第二个参数以'/'开头(对于linux)它应该将它视为绝对路径(不是问题),但如果它没有'以'/'开头,它应该获取类的当前工作路径并将其附加到给定的参数。
我可以通过多种方式获取课程名称:System.getProperty("java.class.path")
,new File(".")
和getCanonicalPath()
等等。
问题是,这只给了我存储包的目录 - 即如果我有一个类存储在“... / project / this / is / package / name”中,它只会给我“ / project /“并忽略实际.class文件所在的包名称。
有什么建议吗?
编辑: 以下是从练习描述
中获得的解释sourcedir可以是绝对的(以“/”开头)或相对于我们从
运行程序的位置
sourcedir是main方法的给定参数。我怎么能找到那条路?
答案 0 :(得分:142)
使用this.getClass().getCanonicalName()
获取完整的班级名称。
请注意,包/类名(“abC”)与.class文件(a / b / C.class)的路径不同,并且使用包名/类名来派生路径通常是糟糕的做法。类文件/包的集合可以在多个不同的类路径中,可以是目录或jar文件。
答案 1 :(得分:23)
有一个类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
代表包MyClass
中的班级mypackage
,则会打印上述代码:
包装:mypackage
分类:MyClass
完整标识符:mypackage.MyClass
您可以获取此信息并根据需要进行修改,或者转到check the API以获取更多信息。
答案 2 :(得分:11)
完全限定名称的操作如下:
String fqn = YourClass.class.getName();
但是您需要读取类路径资源。所以使用
InputStream in = YourClass.getResourceAsStream("resource.txt");
答案 3 :(得分:2)
使用this.getClass().getName()
获得packageName.className
并使用this.getClass().getSimpleName()
获得类名