java - sintaxis - Obtener el nombre de la clase actual, incluido el paquete
tipos de paquetes en java (3)
Estoy trabajando en un proyecto y un requisito es si el segundo argumento para el método principal comienza con ''/'' (para Linux) debe considerarlo como una ruta absoluta (no es un problema), pero si no comienza con ''/'', debería obtener la ruta de trabajo actual de la clase y agregarle el argumento dado.
Puedo obtener el nombre de la clase de varias maneras: System.getProperty("java.class.path")
, new File(".")
Y getCanonicalPath()
, y así sucesivamente ..
El problema es que esto solo me da el directorio en el que se almacenan los paquetes, es decir, si tengo una clase almacenada en "... / project / this / is / package / name", solo me daría "/ project / "e ignora el nombre del paquete donde están los archivos .class reales.
¿Alguna sugerencia?
EDITAR: Aquí está la explicación, tomada de la descripción del ejercicio
sourcedir puede ser absoluto (comenzando con "/") o relativo a donde ejecutamos el programa desde
sourcedir es un argumento dado para el método principal. ¿cómo puedo encontrar ese camino?
El nombre completo es optativo de la siguiente manera:
String fqn = YourClass.class.getName();
Pero necesitas leer un recurso de ruta de clase. Entonces usa
InputStream in = YourClass.getResourceAsStream("resource.txt");
Hay una clase, Class
, que puede hacer esto:
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());
Si c
representara la clase MyClass
en el paquete mypackage
, se imprimiría el código anterior:
Paquete: mi paquete
Clase: MyClass
Identificador completo: mypackage.MyClass
Puede tomar esta información y modificarla para lo que necesite, o ir a Class para obtener más información.
Utilice this.getClass().getCanonicalName()
para obtener el nombre de clase completo.
Tenga en cuenta que un nombre de paquete / clase ("abC") es diferente de la ruta de los archivos .class (a / b / C.class), y que usar el nombre del paquete / nombre de clase para derivar una ruta es generalmente una mala práctica. Los conjuntos de archivos / paquetes de clase pueden estar en múltiples rutas de clases diferentes, que pueden ser directorios o archivos jar.