我正在做一个项目,其中一个要求是,如果main方法的第二个参数以“/
”开头(对于linux),它应该认为它是一个绝对路径(没有问题),但如果它不是以“/
”开头,它应该获取类的当前工作路径,并将给定的参数附加到它后面。
我可以通过几种方式获取类名:System.getProperty("java.class.path")
、new File(".")
和getCanonicalPath()
,等等……
问题是,这只给了我包所在的目录-也就是说,如果我有一个类存储在".../project/this/is/package/name
“中,它只会给我"/project/
”,而忽略了实际.class files
所在的包的名称。
有什么建议吗?
编辑:这是从练习描述中摘录的解释
源目录可以是绝对的(以“/”开头),也可以是相对于我们运行程序的位置的
sourcedir是main方法的给定参数。我怎么才能找到那条路呢?
发布于 2012-03-16 06:39:33
使用this.getClass().getCanonicalName()
获取完整的类名。
请注意,包/类名称(“a.bc”)不同于.class文件的路径(a/b/C.class),并且使用包名称/类名称派生路径通常是不好的做法。类文件/包的集合可以位于多个不同的类路径中,这些路径可以是目录或jar文件。
发布于 2012-03-16 06:43:34
有一个名为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
您可以获取此信息并根据需要对其进行修改,或者访问check the API获取更多信息。
发布于 2012-03-16 06:47:47
全限定名的取值如下:
String fqn = YourClass.class.getName();
但是您需要读取类路径资源。所以请使用
InputStream in = YourClass.getResourceAsStream("resource.txt");
https://stackoverflow.com/questions/9729197
复制相似问题