0

私はApache Commons VFSを学んでいます。特定のディレクトリ内のファイルを検索したいのですが、ファイルの正確な名前がわかりません。ただし、名前の一部は知っています。

ファイルを検索するには、次のようなことができると思います。

FileSystemManager manager = VFS.getManager();
FileObject file = manager.resolveFile(directory + "/" + filename);

if (file.exists()) {
    System.out.println("File found");
} else {
    System.out.println("File not found");
}

ここで、「ディレクトリ」は検索するディレクトリの文字列であり、「ファイル名」は検索するファイルの正確なファイル名です。ファイルがそこにあるかどうかにかかわらず、それは出力されるはずです。

ファイルの正確な名前がわからない場合、同様のことができるかどうか疑問に思っていますが、ファイルの一部は知っています。たとえば、ファイル名が「foo.txt」で終わることがわかっている場合、「*foo.txt」のワイルドカード検索を実行できますか?

4

2 に答える 2

0

をご覧ください

org.apache.commons.vfs2.FileSelector

次の標準実装を見つけることができます。

AllFileSelector、FileDepthSelector、FileFilterSelector、FileTypeSelector

FileFilterは、おそらく得られるものに最も近いFileDepthSelectorから派生します。これを使用して、独自の「ワイルドカード」ベースのセレクターを実装できます。これらすべてのセレクターはフィルターのように機能します。これらは、ファイルシステムをトラバースするときの filesystemmanager のコールバックです。フィルターは、ファイルが選択されているかどうかを決定します。FileDepthSelector から FileFilter を派生させると、通過するファイルシステムのディレクトリ深度レベルを制限できるという利点があります。ファイル変更時間のような他の種類のフィルターを実装できるため、全体的にこれは良いアプローチですが、(* a*b.doc*) のようなフィルターを考えると実装が容易ではないワイルドカードフィルターを提供できた可能性があります。 .

于 2013-05-30T13:59:53.740 に答える
0

この質問が少し古いことはわかっていますが、ワイルドカードの一致が必要な SFTP 統合を実装しているため、今日出くわしました。これを行う Apache ユーティリティを見つけました。 SelectorUtils

これは、FileSelector の実装を実装するという前の回答の提案と共に単独で使用できます。

于 2015-02-04T16:05:03.583 に答える