1

私は使っています

org.apache.commons.io.FileUtils

指定されたフォルダー (および相対サブフォルダー) に含まれるすべてのファイル化された PDF を取得するため

ここに簡単なコード

import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;

public class FileFilterTest
{
    public static void main(String[] args)
    {
        File ROOT_DIR = new File("C:\\PDF_Folder");

        Collection<File> PDF_FILES = FileUtils.listFiles(ROOT_DIR, new IOFileFilter() {

            @Override
            public boolean accept(File file)
            {
                return file.getName().endsWith(".pdf");
            }

            @Override
            public boolean accept(File dir, String name)
            {
                return name.endsWith(".pdf");
            }
        }, TrueFileFilter.INSTANCE);

        for(File pdf : PDF_FILES)
        {
            System.out.println(pdf.getPath());
        }
    }
}

getPath() メソッドは、このように絶対パスを返します

C:\PDF_Folder\SomeFolder\AnotherFolder\A\20120430_TT006059__0000039.pdf
C:\PDF_Folder\Folder1\A\20120430_TT006060__000003A.pdf
C:\PDF_Folder\Folder1\Folder2\Folder3\B\20120430_TT006071__000003B.pdf
C:\PDF_Folder\Folder4\20120430_TT006125__000003C.pdf

指定されたルート フォルダーに関連するパスのみを取得する方法はありますか?

SomeFolder\AnotherFolder\A\20120430_TT006059__0000039.pdf
Folder1\A\20120430_TT006060__000003A.pdf
Folder1\Folder2\Folder3\B\20120430_TT006071__000003B.pdf
Folder4\20120430_TT006125__000003C.pdf

編集: ここでは、jsn のコードによって作成されたソリューション

for(File pdf : PDF_FILES)
{
    URI rootURI = ROOT_DIR.toURI();
    URI fileURI = pdf.toURI();

    URI relativeURI = rootURI.relativize(fileURI);
    String relativePath = relativeURI.getPath();

    System.out.println(relativePath);
}
4

3 に答える 3

2

このようなものかもしれません:

String relPath = new File(".").toURI().relativize(pdf.toURI()).getPath();
System.out.println(relPath);

テスト済み、これは機能します。

于 2012-08-17T20:40:03.980 に答える
1

1 つの方法は、ファイル名からルート パスを単純に「差し引く」ことです。

pdf.getPath().substring(ROOT_DIR.getPath().length() + 1)
于 2012-08-17T20:41:28.527 に答える
0

次のようなこともできます。

for(File pdf : PDF_FILES)
{
        System.out.println(pdf.getParentFile().getName()
                             + System.getProperty("file.separator")
                             + pdf.getName());
}
于 2012-08-17T20:47:04.510 に答える