7

PDFファイルディレクトリからファイルを取得する必要があります。ファイルを見つけるためにすべてのデータを一致させるフィールドがないという問題があります。

次に例を示します。

ファイル名:

Comp_20120619_170310_2_632128_FC_A_8_23903.pdf

ファイル名の生成:

Comp_20120619_--------_2_632128_FC_A_8_23903.pdf

"--------"ファイルをCOMPLETE名にするフィールドがありません。

試してFile.listいますが、正しいファイルが見つかりません。

4

4 に答える 4

17

ファイル名と一致するようにFilenameFilterを定義し、ファイル名が探しているものと一致する場合はtrueを返すことができます。

    File dir = new File("/path/to/pdfs");
    File[] files = dir.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.matches("Comp_20120619_[^_]*_2_632128_FC_A_8_23903.pdf");
        }
    });

このlistFiles()メソッドは、Fileオブジェクトの配列を返します。パターンに一致するファイルが複数存在する可能性があるため、これは理にかなっています(少なくとも理論的には、必ずしもシステムにあるとは限りません)。

正規表現を使用してファイル名を[^_]*照合し、不明なセクションを照合するために使用しました。ただし、ファイル名が一致した場合にブール値を返す任意の関数を使用できます。たとえば、正規表現の代わりにstartsWithandを使用できます。endsWith

于 2012-11-22T14:54:04.163 に答える
1

あなたの問題はlist()何ですか?

File folder = new File("path/to/pdffilefolder");
String[] allFilesInThatFolder = folder.list();
// contains only files, no folders.
于 2012-11-22T14:52:43.357 に答える
1

WildcardFileFilter(org.apache.commons.io.filefilter)を使用することは可能です

コードは単純に見えます:

FilenameFilter filenameFilter = new WildcardFileFilter("Comp_20120619_*_2_632128_FC_A_8_23903.pdf");
String[] pdfFileNames = yourDir.list(filenameFilter);
if(pdfFileNames != null ) {
    for (String pdfName : pdfFileNames)
于 2017-01-13T09:51:34.403 に答える
1

それがうまくいくことを願っています。

String[] pdfFiles= yourDir.listFiles(getFileNameFilterMachingWithFileName("Comp_20120619_"));



private FilenameFilter getFileNameFilterMachingWithFileName(final String 
fileNameStart) {
        return new FilenameFilter() {
            @Override
             public boolean accept(File dir, String name) {
               return (name.toUpperCase().startsWith(fileNameStart.toUpperCase()) && name.toUpperCase().endsWith(".PDF"));          
             }
        };
    }
于 2017-11-07T06:13:00.813 に答える