2011-12-19 3 views
-1

Iam은 java를 사용하여 Windows 용 데스크톱 응용 프로그램에서 작업하고 있습니다. 내 응용 프로그램에는 .php를 모두 검색해야한다는 요구 사항이 있습니다.예외 java.lang.NullPointerException

저는 재귀 적 방법을 사용합니다.

및 REGEX

내 코드 : 다음과 같은

Exception in thread "main" java.lang.NullPointerException 
    at Copier.find(Copier.java:11) 
    at Copier.find(Copier.java:21) 
    at Copier.main(Copier.java:28) 
+1

내 생각에'src.list()'는 null을 반환했지만 줄 수를 추측하고 있습니다. 디렉토리에 대한 권한이 없기 때문에 이러한 상황이 발생할 수 있습니다. –

+0

예 그렇지만 관리자에게 문의하십시오. –

+0

그 행에 오류가 발생한 곳이면 어떤 이유로 파일 오류가 발생합니다. 'canRead'로 위치를 테스트 해보십시오. –

답변

1

변경의 주요 목적을 디버깅 :

import java.io.File; 


public class Copier { 
public static void find(String source,String rep) 
{ 
    File src=new File(rep); 
    if(src.exists() && src.isDirectory()) 
    { 
     String[] tab=src.list(); 
     for(String s:tab) 
     { 
      File srcc=new File(rep+"\\"+s); 
      if(srcc.isFile()) 
      { 
       if(srcc.getName().matches(".*"+source+"$")) 
       System.out.println(s); 
      } 

      else 
       find(source,srcc.getAbsolutePath()); 
     } 
    } 
} 

public static void main(String[] args) 
{ 
    find(".php","C:\\"); 
} 
} 

하지만 난이 예외가있다.

public static void main(String[] args) 
{ 
    try { 
     find(".php","C:\\"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

그리고

if (src != null && src.exists() && src.isDirectory()) 

편집에 널 체크를 추가

다음

나를 위해 잘 작동, (나는 윈도우 7을 사용하고 있습니다).

import java.io.File; 

public class Copier { 

    public static void find(String source,String rep) { 
     File src = new File(rep); 
     if (src!= null && src.exists() && src.isDirectory()) { 
      String[] tab = src.list(); 
      if (tab != null) { 
       for(String s : tab) { 
        File srcc = new File(rep+"\\"+s); 
        if (srcc.isFile()) { 
         if (srcc.getName().matches(".*"+source+"$")) { 
          System.out.println(s); 
         } 
        } else { 
         find(source,srcc.getAbsolutePath()); 
        } 
       } 
      } else { 
       //System.out.println(" list is null"); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     try { 
      find(".java", "C:\\"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

내가하려고하지만 난 예외 java.lang.NullPointerException이이 Copier.find (Copier.java:11) Copier.find에서 \t (Copier.java:21) Copier.main에서 \t (Copier.java:29에서 \t) –

+0

@Anouar 코드는 "c : \\ Work \\"에서 잘 작동합니다. "c : \"를 시도 할 때만 동일한 예외가 발생합니다. Alex는 관리자 권한을 확인하도록 권유했습니다. 작동 예 – Vaandu

+0

내가 관리자로 내 응용 프로그램을 실행하지만 난이 apph2.php creditbatch.php details.php :::::: java.lang.NullPointerException이 Copier.find에서 \t (복사기를 가지고 당신에게 –

1

src.list()을 반환합니다. 아마도 (현재 사용자) 디렉토리에 대한 액세스 권한이 없기 때문에 발생합니다. 약 C:\ (디스크 C의 루트 디렉토리)라고 생각합니다. 이 문제는 Windows 7에서 자주 발생합니다.

먼저 액세스 권한이있는 디렉터리를 사용하여 코드를 디버깅 해보십시오. 그런 다음 null을 신경 쓰도록 코드를 수정하십시오. 그런 다음 관리자로 프로그램을 실행하십시오.

+0

감사합니다 .java : 11) \t Copier.find (Copier.java:21) \t Copier.main (Copier.java:29) ' –

관련 문제