获取java中pdf文件的所有绝对文件路径

时间:2015-04-27 05:09:24

标签: java file

我需要获取扩展名为absolute file path的所有.pdf个文件。我使用下面提到的代码,但我只能获得一个文件的绝对文件路径。

如何修改代码以获取所有绝对文件路径?

 public class FindFiles {

        String absoluteFilePath = "";
        String fileName;

         public String PdfFiles(String parentDirectory, String fileExtension) {

        FileFilter fileFilter = new FileFilter(fileExtension);

        File parentDir = new File(parentDirectory);

        // Put the names of all files ending with .pdf in a String array
        String[] listOfTextFiles = parentDir.list(fileFilter);

        if (listOfTextFiles.length == 0) {

            System.out.println("There are no files in this direcotry!");

        }

        for (String file : listOfTextFiles) {

            //construct the absolute file paths...
            absoluteFilePath = new StringBuffer(parentDirectory).append(File.separator).append(file).toString();

            fileName = file.toString();
        }
        return absoluteFilePath;
    }

    public static void main(String args[]) {
        FindFiles f = new FindFiles();
        f.PdfFiles("", "");
    }
}

3 个答案:

答案 0 :(得分:1)

你每次都在循环中覆盖absoluteFilePath; 试试

absoluteFilePath += new StringBuffer(parentDirectory).append(File.separator).append(file).toString();

答案 1 :(得分:0)

不要打扰,请使用java.nio.file:

final Path dir = Paths.get(baseDir).toAbsolutePath();
final String filter = "*." + extension;

final List<Path> ret = new ArrayList<>();

try (
    final DirectoryStream<Path> dirstream 
        = Files.newDirectoryStream(dir, filter);
) {
    for (final Path entry: dirstream)
        ret.add(entry);
}

return ret;

如果您使用Java 8,那就更简单了。

答案 2 :(得分:0)

可以使用java.nio包中的类来提供更有效的问题解决方案。

E.g。要检查文件是否是pdf文件,请使用Files.probeContentType(Path path)。 不要编写循环来访问这些目录中的所有目录和文件,而是使用Files.walkFileTree(Path start, FileVisitor<? super Path> visitor)

使用这些类的问题的解决方案是

public class FindPdfFiles {
public static void main(String[] args) throws IOException{
    final Path path = Paths.get("C:\\SearchDirectoryForPDF");
    Files.walkFileTree(path, new FindPdfFilesFilter());
}
}

class FindPdfFilesFilter extends  SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes arg1)
        throws IOException {
    final String mimeTypeOfFile = Files.probeContentType(path);
    if(mimeTypeOfFile != null && !mimeTypeOfFile.isEmpty() && mimeTypeOfFile.toLowerCase().contains("pdf")) {
        System.out.println(path.toString());
    }
    return FileVisitResult.CONTINUE;
}
}