0

私は Apache FileUtils と IOFileFilter を使用して、フォルダーの下にあるすべてのファイルを再帰的にリストし、.svn フォルダーを除外しました。これが私が試したコードです

File selectedFolder = new File(path);\\path to folder to list
        final IOFileFilter dirs = new IOFileFilter() {
            @Override
            public boolean accept(File file, String s) {
                return file.isDirectory();
            }

            @Override
            public boolean accept(File file) {
                // TODO Auto-generated method stub
                if(file.getName().toLowerCase().equalsIgnoreCase(".svn")||file.getName().toLowerCase().contains(".svn"))

                return false;
                else return true;
            }



        };
        filesList.addAll(FileUtils.listFiles(selectedFolder,dirs, TrueFileFilter.INSTANCE));

エラーが発生しています

java.lang.IllegalArgumentException: Parameter 'directory' is not a directory
    at org.apache.commons.io.FileUtils.validateListFilesParameters(FileUtils.java:545)
    at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:521)

誰がどこが間違っているのか教えてもらえますか。使用しているフィルターに問題があるように感じます。私はそれを理解できませんでした

4

2 に答える 2

3

実際、FileFilterUtils には、使用できる makeSVNAware というメソッドが含まれています。SVN ディレクトリを無視するフィルターを返します。例えば:

filesList.addAll(
    FileUtils.listFiles(selectedFolder, TrueFileFilter.TRUE,
            FileFilterUtils.makeSVNAware(null)));

listFiles は、2 番目の引数としてファイル フィルターを想定し、3 番目の引数として dir フィルターを想定していることに注意してください。あなたのコードでは、それらは逆です。したがって、makeSVNAware を使用したくない場合、コードは次のようになります。

File selectedFolder = new File(path); // path to folder to list

final IOFileFilter dirs = new IOFileFilter() {
    @Override
    public boolean accept(File file, String s) {
        return file.isDirectory();
    }

    @Override
    public boolean accept(File file) {
        return (!file.getName().toLowerCase().equalsIgnoreCase(".svn"));
    }

};
// 2nd argument: TRUE filter, returning all files
// 3rd argument: dirs filter, returning all directories except those named .svn
filesList.addAll(FileUtils.listFiles(selectedFolder, TrueFileFilter.TRUE, dirs));
于 2012-08-09T21:10:35.717 に答える
0

機能を2つの機能に分割したようです。

2 番目のものもチェックしisDirectory()、最初のものも名前をチェックする必要があります。

于 2012-08-09T14:00:48.107 に答える