0

ワイルドカード文字を使用して、ディレクトリ内のファイルを処理したいと思います。ワイルドカード文字が指定されている場合は、ワイルドカード文字と一致するファイルを処理します。指定されていない場合は、すべてのファイルを処理します。これが私のコードです

   List<File> fileList;
   File folder = new File("Directory");
   File[] listOfFiles = folder.listFiles();
    if(prop.WILD_CARD!=null) {  
        Pattern wildCardPattern = Pattern.compile(".*"+prop.WILD_CARD+"(.*)?.csv",Pattern.CASE_INSENSITIVE);
        for(File file: listOfFiles) {
            Matcher match = wildCardPattern.matcher(file.getName());
            while(match.find()){
                String fileMatch = match.group();
                if(file.getName().equals(fileMatch))  {
                    fileList.add(file); // doesn't work
                }
            }
        }
    }
    else
        fileList = new LinkedList<File>( Arrays.asList(folder.listFiles()));

ワイルドカード文字と一致するファイルを別のファイルリストに入れることができません。plsは、ワイルドカード文字に一致するすべてのファイルを別のファイルリストに配置できるようにコードを変更するのに役立ちます。ここでは、正規表現でprop.WILD_CARDを連結します。これは任意の文字列にすることができます。たとえば、ワイルドカードがテストの場合、パターンはです。test(。)?.csv。そして、このワイルドカードに一致するファイルを保存し、ファイルリストに保存したいと思います。

4

2 に答える 2

1

このコードをテストしたところ、かなりうまく動作しました。どこか別の場所で論理エラーをチェックする必要があります。

    public static void main(String[] args) {

    String WILD_CARD = "";
     List<File> fileList = new LinkedList<File>();
       File folder = new File("d:\\");
       File[] listOfFiles = folder.listFiles();
        if(WILD_CARD!=null) {  
            Pattern wildCardPattern = Pattern.compile(".*"+WILD_CARD+"(.*)?.mpp",Pattern.CASE_INSENSITIVE);
            for(File file: listOfFiles) {
                Matcher match = wildCardPattern.matcher(file.getName());
                while(match.find()){
                    String fileMatch = match.group();
                    if(file.getName().equals(fileMatch))  {
                        fileList.add(file); // doesn't work
                    }
                }
            }
        }
        else
            fileList = new LinkedList<File>( Arrays.asList(folder.listFiles()));

        for (File f: fileList) System.out.println(f.getName());
}

D:これにより、ドライブ上のすべての*.mppファイルのリストが返されます。

私も使用することをお勧めします

        for (File file : listOfFiles) {
            Matcher match = wildCardPattern.matcher(file.getName());
            if (match.matches()) {
                fileList.add(file);
            }
        }
于 2012-10-05T11:30:15.160 に答える
0

FilenameFilterクラスを調べて、コードを単純化するのに役立つかどうかを確認することをお勧めします。正規表現については、「。」をエスケープする必要があると思います。それが機能するための文字。

于 2012-10-05T10:12:52.317 に答える