0

ネットワーク共有フォルダのファイルを使用するために、JCIFSに移動します。これまでのところ、必要なファイルを一覧表示するためのテストとして次のことを行いました(この例から取得)

public class ListDirectoryContent extends DosFileFilter {

    int count = 0;

    public ListDirectoryContent() {
        super("*.txt", 0xFFFF);
    }
    public ListDirectoryContent(String wildcard, int attributes) {
        super(wildcard, attributes);
    }

    public boolean accept(SmbFile file) throws SmbException {
        System.out.print( " " + file.getName() );
        count++;

        return (file.getAttributes() & attributes) != 0;
    }

    public static void main( String[] argv ) throws Exception {

        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("DOMAIN","myuser","A good password, yes sir!");
        SmbFile file = new SmbFile( "smb://networkResource/sharedFolder/Files/SubFolderOne/", auth);
        ListDirectoryContent llf = new ListDirectoryContent();

        long t1 = System.currentTimeMillis();
        SmbFile[] pepe = file.listFiles(llf);
        long t2 = System.currentTimeMillis() - t1;

        System.out.println();
        System.out.println( llf.count + " files in " + t2 + "ms" );

        System.out.println();
        System.out.println( pepe.length + " SmbFiles in " + t2 + "ms" );
    }
}

そしてこれまでのところ、1つの拡張ワイルドカードで機能します。dosfilefilterを拡張して、一連の拡張機能をチェックするにはどうすればよいですか?(commons.io.FileUtilsのように)

4

1 に答える 1

3

この基本的なSmbFilenameFilterを作成して、ファイル名にワイルドカードを使用しました。お役に立てれば!

private static class WildcardFilenameFilter implements SmbFilenameFilter {
    private static final String DEFAULT_WIDLCARD = "*";

    private final String wildcard = DEFAULT_WIDLCARD;
    private final String regex;

    public WildcardFilenameFilter(String filename) {
        regex = createRegexPattern(filename);
    }

    @Override
    public boolean accept(SmbFile dir, String name) throws SmbException {
        return name.matches(regex);
    }

    private String createRegexPattern(String filename) {
        return filename.replace(".", "\\.").replace(wildcard, ".+");
    }
}
于 2013-06-18T12:13:05.863 に答える