2010-08-04 5 views
4

프로젝트의 클래스 경로에있는 Eclipse 프로젝트에있는 특정 파일을 찾아야합니다.IProject - Eclipse에서 파일 검색

나는 IProject 인스턴스를 가지고 있지만 그나마은 IProject 인터페이스는 여러 findMember 방법이있는 IContainer을 확장

답변

6

IFile 인스턴스를 얻는 방법을 알고있다. getType을 사용하여 유형을 확인한 후 IFile으로 캐스팅 할 수있는 IResource를 얻습니다. 인터페이스를 살펴보고 제대로 문서화되어 있습니다.

+0

findMembers는 나를 위해 일하지 않았습니다 ... 하지만 Icontainer.members()를 시도했는데 성공했습니다. 도움을 주셔서 감사합니다 ... –

+3

이클립스 플러그인 개발에 대한 수년 간의 경험이 있습니다. 한 가지 조언이 있다면 나는 그것을 줄 수있다. 소스를 사용하라. 코드 탐색 및 읽기 기술을 개발하고 언제나 쉽게 이용할 수있는 소스를 확인하십시오. – zvikico

+0

'IProject'는 classpath를 신경 쓰지 않는다는 것을 명심하십시오. 'members()'함수는 직접적인 자식 객체만을 반환합니다. 그래서 클래스 패스에있는 파일이 아니라 프로젝트 루트 디렉토리에있는 파일이었습니다. – Stroboskop

3

저도 같은 문제에 직면 한이 내가 무슨 짓을했는지 짧은에 있습니다

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 패키지 구분 기호입니다. 그래서 나는 당신이 먼저 올바른 폴더와 파일을 얻어야한다고 생각합니다.

+0

이것은 자바 프로젝트에서만 작동합니다! pde (플러그인) 또는 다른 프로젝트가있는 경우 JavaCore.create (프로젝트)는 기존 프로젝트가 아닌 것을 만듭니다. – Nachtgold