6

ルート ディレクトリとそのサブディレクトリでファイルを検索しようとしています。

Step1- 指定したパスでディレクトリを検索します。Step2- 上記のディレクトリが見つかった場合は、そのサブディレクトリの 1 つでファイルを探します。

このために、再帰的に検索する以下のコード スニペットを使用します。ここでの問題は、上記の両方の要件を満たしている場合に、再帰から抜け出すにはどうすればよいかということです..?

 boolean bFileFound = false;
File  fileFound     = null;

private void findFile( File aFile, String sDir ){

    String  filePath = aFile.getAbsolutePath();

    if( aFile.isFile() && filePath.contains( sDir ) ){

              if( aFile.getName().contains( "test2.adv")){
                  Log.d(TAG, "[FILE] " + aFile.getName() );
                  fileFound = aFile;
                  bFileFound = true;
              }

             // return true;
    }else if( aFile.isDirectory() ){

        String sDirName = aFile.getName();
        Log.d(TAG, "[DIR] " + sDirName );

        if( sDirName.contains( sDir ) ){

            Log.d( TAG, "Found the directory..& Absolute Path = " + aFile.getAbsolutePath());
            sDir = sDirName;
        }

        File[] listFiles = aFile.listFiles();

        if( listFiles != null ){

          for( int i = 0; i < listFiles.length; i++ ){

              if(bFileFound)
                    return;

            findFile( listFiles[ i ], sDir );
          }
        }else{

          Log.d( TAG,  " [ACCESS DENIED]" );
        }
    }

   // return null;
}

ありがとう、DK

4

2 に答える 2

7
/**
 * Search file a file in a directory. Please comment more here, your method is not that standard.
 * @param file the file / folder where to look our file for.
 * @param sDir a directory that must be in the path of the file to find
 * @param toFind the name of file we are looking for. 
 * @return the file we were looking for. Null if no such file could be found.
 */
private File findFile( File aFile, String sDir, String toFind ){
    if( aFile.isFile() && 
            aFile.getAbsolutePath().contains( sDir ) && 
            aFile.getName().contains( toFind ) ) {
                        return aFile;
        } else if( aFile.isDirectory() ) {
        for( File child : aFile.listFiles() ){
            File found = findFile( child, sDir, toFind );
                    if( found != null ) { 
                        return found;
                    }//if
        }//for
    }//else
   return null;
}//met

ここで、findFile を呼び出すときに、「test2.adv」を 3 番目のパラメーターとして渡します。ハードコーディングするよりも興味深いことです。

また、複数のファイルが検索に一致する可能性があることに注意してください。この関数はそれをうまく処理できず、最初に見つかったファイルを返します。

于 2012-05-14T18:58:19.557 に答える