프로젝트의 클래스 경로에있는 Eclipse 프로젝트에있는 특정 파일을 찾아야합니다.IProject - Eclipse에서 파일 검색
나는 IProject
인스턴스를 가지고 있지만 그나마은 IProject
인터페이스는 여러 findMember
방법이있는 IContainer
을 확장
프로젝트의 클래스 경로에있는 Eclipse 프로젝트에있는 특정 파일을 찾아야합니다.IProject - Eclipse에서 파일 검색
나는 IProject
인스턴스를 가지고 있지만 그나마은 IProject
인터페이스는 여러 findMember
방법이있는 IContainer
을 확장
IFile
인스턴스를 얻는 방법을 알고있다. getType
을 사용하여 유형을 확인한 후 IFile
으로 캐스팅 할 수있는 IResource를 얻습니다. 인터페이스를 살펴보고 제대로 문서화되어 있습니다.
저도 같은 문제에 직면 한이 내가 무슨 짓을했는지 짧은에 있습니다
이IResource getResource(IProject project, String folderPath, String fileName) {
IJavaProject javaProject = JavaCore.create(project);
for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
IPackageFragment folderFragment = root.getPackageFragement(folderPath);
IResource folder = folderFragment.getResource();
if (folder == null || ! folder.exists() || !(folder instanceof IContainer)) {
continue;
}
IResource resource = ((IContainer) folder).findMember(fileName);
if (resource.exists()) {
return resource;
}
}
// file not found in any source path
return null;
}
그것은 꽤 추한 모습과 어쩌면 더 직접적인 방법이있다. 그러나 그것은 효과적이다.
클래스 패스를 사용해야하는 경우 IJavaProject
을 사용해야하며 조각이 작동하는 방식으로 파일 경로를 직접 검색 할 수 없습니다. "." (마침표)는 Java 패키지 구분 기호입니다. 그래서 나는 당신이 먼저 올바른 폴더와 파일을 얻어야한다고 생각합니다.
이것은 자바 프로젝트에서만 작동합니다! pde (플러그인) 또는 다른 프로젝트가있는 경우 JavaCore.create (프로젝트)는 기존 프로젝트가 아닌 것을 만듭니다. – Nachtgold
findMembers는 나를 위해 일하지 않았습니다 ... 하지만 Icontainer.members()를 시도했는데 성공했습니다. 도움을 주셔서 감사합니다 ... –
이클립스 플러그인 개발에 대한 수년 간의 경험이 있습니다. 한 가지 조언이 있다면 나는 그것을 줄 수있다. 소스를 사용하라. 코드 탐색 및 읽기 기술을 개발하고 언제나 쉽게 이용할 수있는 소스를 확인하십시오. – zvikico
'IProject'는 classpath를 신경 쓰지 않는다는 것을 명심하십시오. 'members()'함수는 직접적인 자식 객체만을 반환합니다. 그래서 클래스 패스에있는 파일이 아니라 프로젝트 루트 디렉토리에있는 파일이었습니다. – Stroboskop