2011-12-19 41 views
-1

Iam在使用java的windows版本的桌面應用程序中工作。在我的應用程序中,需要搜索所有.php異常java.lang.NullPointerException

我使用遞歸方法;

和正則表達式

我的代碼:

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:\\"); 
} 
} 

但我有這樣的例外:

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

是的,但我訪問一個administartor –

+0

好吧,如果該行是錯誤來自哪裏,出於某種原因你會得到一個文件錯誤。嘗試使用'canRead'測試位置。 –

回答

1

主要變化如下圖所示,用於調試的目的。

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

而且在

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

編輯添加一個空檢查:

下面爲我工作得很好,(我使用Windows 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 \t在Copier.find(Copier.java:11)​​ \t在Copier.find(Copier.java:21) \t在Copier.main(Copier.java:29 ) –

+0

@Anouar代碼適用於「c:\\ Work \\」。只有在嘗試「c:\」時纔會得到相同的異常。正如亞歷克斯建議嘗試檢查管理員權限。 – Vaandu

+0

是它的工作原理謝謝 –

1

src.list()返回null。這可能是因爲您(當前用戶)無權訪問目錄。我想這是關於C:\(磁盤C的根目錄)。這經常發生在Windows 7上。

首先嚐試使用具有訪問權限的目錄調試您的代碼。然後修復您的代碼以關心空值。然後嘗試以管理員身份運行程序。

+0

我跑我的應用程序作爲管理員,但我有這個apph2.php creditbatch.php details.php :::::: 顯示java.lang.NullPointerException \t在Copier.find(複印機(Copier.java:29) ')(Copier.java:11) \t at Copier.find(Copier.java:21) \t at Copier.main(Copier.java:29) ' –

相關問題