2016-11-11 13 views
0

私が選択したディレクトリに、名前の付いたすべてのファイルを検索しようとしています。 C:\Program Files、またはC:\Usersのようなコードを私が使っているときに動作させます。しかし、私がするときc:/私はごみ箱に立ち往生し、java.lang.NullPointerException を取得し、c:\$Recycle.Bin\S-1-5-21-1478355014-127360780-1969717230-1002144で停止します。アクセスできないファイルをバイパスするにはどうすればよいですか?

public void DirectorySerch(String target, String dirName){ 
    File f = new File(dirName); System.out.println("H"); 
    if(!f.isDirectory()){ 
     throw new IllegalArgumentException("that is not a valid directory"); 
    } 
    for(File folderItem : f.listFiles()){ 
     if(folderItem.isDirectory()){ 
      System.out.println(folderItem.getAbsolutePath()); 
      if(!folderItem.equals("")){ 
       DirectorySerch(target,folderItem.getPath()); 
      } 
      // Return the result if it is not empty 
      /* if (!result.equals(folderItem.getName())){ 
      files[filesFounfd] = folderItem.getAbsolutePath(); 
      filesFounfd++; 
      }*/ 
     }else{ 
      if(folderItem.getName().equals(target)){ 
       files[filesFounfd] = folderItem.getAbsolutePath(); 
       System.out.println(folderItem.getAbsolutePath()); 
       filesFounfd++; 
      } 
     }   
    } 
} 

ごみ箱を扱う必要がない場合にこの問題が発生しないようにするにはどうすればよいですか?

+0

どのようにするために周りにtryキャッチをすることによってこの問題を解決することができ判明します)return; 'あなたのメソッドの始めに? –

+0

コードがコンパイルされません - いくつかの変数宣言がありません。ヘルプが必要なので、コンパイルして実行できるコードを提供し、問題を示すサンプル入力を提供することで、人々が手助けをしやすくする必要があります。 NullPointerExceptionがどこから来たのかは決して言及していません。チャンスは、もしあなたがそれをしていれば、あなた自身ですでに問題を解決していたでしょう。 –

答えて

1
for(File folderItem : f.listFiles()){ 

ここに問題があります。 listFiles()はnullを返すことができ、このすべての構文でNPEをスローすることができます。変更します

File[] files = f.listFiles(); 
if (files != null) { 
    for(File folderItem : files){ 
-1

ので、それはあなたが(「$ Recycle.Bin」.equals(dirNameに)場合は `追加についてループ

public void DirectorySerch(String target, String dirName) { 
    File f = new File(dirName); 
    System.out.println("H"); 
    if (!f.isDirectory()) { 
     throw new IllegalArgumentException("that is not a valid directory"); 
    } 
    try { 
     for (File folderItem : f.listFiles()) { 
      if (folderItem.isDirectory()) { 
       System.out.println(folderItem.getAbsolutePath()); 
       if (!folderItem.equals("")) { 
        DirectorySerch(target, folderItem.getPath()); 
       } 
      } else { 
       if (folderItem.getName().equals(target)) { 
        files[filesFounfd] = folderItem.getAbsolutePath(); 
        System.out.println(folderItem.getAbsolutePath()); 
        filesFounfd++; 
       } 
      } 
     } 
    }catch(NullPointerException sd){ 

    } 
} 
+0

「NullPointerException」はすべて、問題の原因となったものだけでなく、無視できると仮定します。良い練習ではありません。 – EJP

関連する問題