2011-12-09 1 views
2

나는 디렉토리에있는 모든 파일을 나열이 코드를 가지고 :자바 LISTFILES

디렉터리가 손상 및 잘못된 문자와 파일 이름을 가지고있어, 때문에이 정지
File d = getRootDir(cId); 
return d.listFiles(new FilenameFilter() { 
      public boolean accept(File dir, String name) {    
       return name.endsWith(FILE_EXTENSION); 
      } 
} 

. 이 작업을 수행 할 수있는 대체 방법이 있나요? 그래서 파일 목록을 가져올 수 있습니다.

감사합니다.

+0

어떤 오류가 발생하고 있습니까? 그냥 걸려 있니? – Newtopian

+0

예외가 발생하지 않았습니다. 절대 반환하지 않습니다. 하나의 파일 ??? _ cam.xml이 있습니다. Another> : ALE.xml – Arun

답변

0

개인적으로 파일 작업을 수행 할 때마다 나는 아파치 Commons-io을 사용할 것입니다. 필자는 표준 File 객체를 사용하면서 Java의 API보다 훨씬 쉽게 작업 할 수있는 API를 찾았습니다.

그건 내가 전환하지 않고 목록을 만들 것인지 모르겠다 고 말했다.

로깅 문을 accept 메소드에 삽입하십시오. 간단한 로깅 라이브러리를 권하고 싶습니다.

System.out.println ("+ dir에서"+ 이름 + 확인 ";

충분해야합니다.

지금은 매달려 있지만 어째서 그런지는 알 수 없습니다. 아마도 당신이 생각하는 이유 때문에 교수형에 처하지 않을 것입니다. 로그 문은 이에 대한 더 많은 정보를 줄 것입니다. 추적을 통해 코드를 자세히 파고들 수 있습니다.하지만이 경우 JDK의 소스 코드를 다운로드해야 할 수 있습니다.

파일에 문제를 일으키는 불법 문자가 무엇입니까?

또한 여기에서 코드를 다시 살펴보십시오. 파일 이름에 파일 및 확장자가 포함되어 있습니다. 파일을 확장 또는 다른 확장이 없을 수 있습니다 어디에 거짓 긍정을 얻을 위험이 있습니다. 예 :

FILE_EXTENSION = "log";

원하는 파일이 아니더라도 다음 파일이 실행됩니다.

  • totolog
  • toto.totolog

당신은 앞에 추가 할 수 있습니다. 이전에는 사용자가 정의한 구성이 아닌 완전한 제어 권한을 가지고 있다면이를 수행 할 것이지만보다 깔끔한 해결책은 확장을 추출하여 비교하는 것입니다. FilenameUtils.getExtension에 대한 간단한 호출이 트릭을 수행합니다.

+1

또는 accept() 메소드에서 System.out.println을 추가하십시오. – user949300

+0

롤 ... 참으로 ....^_^'가장 간단한 해결책이 때때로 우리를 피하는 방법 재미 있습니다! 그 덕분에! 이것을 반영하기 위해 답을 편집 할 것입니다. – Newtopian

0

수락 여부를 결정하기 위해 d.list()를 시도해 보셨습니까? 문제는 FilenameFilter 내부에있을 수 있으며 파일 목록에 대한 실제 간섭이 아닙니다.

0

Windows 사용자입니까? chkdsk 시도 했습니까? (그러나 당신은 요즘 그것에 도착한다).