저는 프로젝트에서 작업 중이며 한 가지 요구 사항은 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()
단지 클래스 이름을 얻기 위해