2016-06-15 5 views
1

背景チェックファイル配布

私は固定されたディレクトリ内のサブフォルダの数を作成しているアプリケーションがあります。これらのディレクトリ間では、いくつかのファイルが置かれています。ファイル数はこれらのフォルダに均等に分散されます。私は、各フォルダにn個のファイルがあるので、フォルダ間で固定値を調べるテストがあります。

質問

どのように4つのサブフォルダおよび5つのメッセージが存在する場合、これら4つのサブフォルダを横切るメッセージの配信は、1フォルダ内の2つのメッセージと他の3 1つのメッセージである、ことをテストすることができますか?

ソースコード

public boolean checkFileCountInEachFolder(int expectedCount){ 
    File folder = new File(AppProperties.getInstance().get("path")); 
    File[] files = folder.listFiles(); 

    if (files != null) { 
     for (int i = 0; i < files.length; i++) { 
      File file = files[i]; 

      if (file.isDirectory()) { 
       int fileCount = listFiles(file, new ArrayList<File>()).size(); 
       if (fileCount!=expectedCount) { 
        return false; 
       } 
      } 
     } 
    } 

    return true; 
} 
+1

あなたの命名に関するヒント:名前に「チェック」が付いているメソッドは通常ブール値を返しません。意味:あなたはそれを "チェック"にしておくか、問題を示すために例外をスローする必要があります。または "doAllFoldersHaveEqualFileCount"などの名前に変更します。そして、名前を "doAllFoldersHaveLessThanFiles"に変更すると、問題を解決するヒントが得られるかもしれません。 – GhostCat

答えて

1

それを行うには多くの方法がありますが、ここではそれらの一つです。

まず、サブディレクトリをFileFilterにしてください。

メッセージの数(メソッドのパラメータはメッセージの数)をフォルダの数で除算して、最小予想発生時間(0かもしれない)を取得します。

あなたが均等に配布しているので、出現箇所の最大数は、各サブフォルダ内のファイル数がこの範囲にある(または分、単純に等しいことを+ 1

チェック分を超えることはできませんまたはこの特定の場合にはmaxまで)。

最後に、見つかったすべてのファイルの数を合計し、結果をメッセージの総数と比較します。

public boolean checkFileCountInEachFolder(final int nbMessages) { 

    File folder = new File(AppProperties.getInstance().get("path")); 

    File[] subFolders = folder.listFiles(new FileFilter() { 
     @Override 
     public boolean accept(final File f) { 
      return f.isDirectory(); 
     } 
    }); 

    int nbFolders = subFolders.length; 
    int minOccurences = nbMessages/nbFolders; 
    int maxOccurences = minOccurences + 1; 

    int totalCount = 0; 

    for (int i = 0; i < subFolders.length; i++) { 
     File file = subFolders[i]; 

     int fileCount = listFiles(file, new ArrayList<File>()).size(); 
     if (fileCount < minOccurences || fileCount > maxOccurences) { 
      return false; 
     } 

     totalCount += fileCount; 

    } 

    return (totalCount == nbMessages); 

} 
+0

最後の行は次のようになります。return(totalCount == nbMessages); – Graham

+1

はい、それを見て修正しました。ありがとう:) – Berger