[java] Java에서 패키지 이름을 포함한 현재 클래스 이름을 얻는 방법은 무엇입니까?

저는 프로젝트에서 작업 중이며 한 가지 요구 사항은 main 메서드의 두 번째 인수가 ” /“(리눅스의 경우)로 시작하는 경우 절대 경로 (문제가 아님)로 간주해야하지만 “로 시작하지 않는 경우”입니다. /”, 클래스 의 현재 작업 경로 를 가져 와서 주어진 인수에 추가해야합니다.

System.getProperty("java.class.path"), new File(".")getCanonicalPath()등 여러 가지 방법으로 클래스 이름을 가져올 수 있습니다 .

문제는 패키지가 저장된 디렉토리 만 제공한다는 것입니다. 즉 .../project/this/is/package/name, ” “에 저장된 클래스가있는 경우 ” “만 제공 /project/하고 실제 존재하는 패키지 이름은 무시합니다 .class files.

어떤 제안?

편집 : 여기에 운동 설명에서 가져온 설명이 있습니다.

sourcedir은 절대적 ( “/”로 시작)이거나 프로그램을 실행하는 위치에 상대적 일 수 있습니다.

sourcedir은 main 메소드에 대해 주어진 인수입니다. 그 길을 어떻게 찾을 수 있습니까?



답변

this.getClass().getCanonicalName()전체 클래스 이름을 가져 오는 데 사용 합니다.

패키지 / 클래스 이름 ( “abC”)은 .class 파일 (a / b / C.class)의 경로와 다르며 패키지 이름 / 클래스 이름을 사용하여 경로를 파생하는 것은 일반적으로 좋지 않습니다. 클래스 파일 / 패키지 세트는 여러 다른 클래스 경로에있을 수 있으며 디렉토리 또는 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의 클래스 MyClass를 나타내는 경우 mypackage위 코드는 다음을 인쇄합니다.

패키지 : mypackage
클래스 : MyClass
전체 식별자 : mypackage.MyClass

이 정보를 가져와 필요에 따라 수정하거나 API 에서 자세한 정보를 확인할 수 있습니다.


답변

정규화 된 이름은 다음과 같이 획득됩니다.

String fqn = YourClass.class.getName();

하지만 클래스 경로 리소스를 읽어야합니다. 그래서 사용

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


답변

사용 this.getClass().getName()얻기 위해 packageName.className사용은 this.getClass().getSimpleName()단지 클래스 이름을 얻기 위해


답변