2015-04-27 3 views
0

Мне нужно получить все файлы absolute file path с расширением .pdf. Я использую код, упомянутый ниже, но я могу получить только абсолютный путь к файлу только одного файла.получить полный путь к файлу PDF в java

Как я могу изменить код, чтобы получить все абсолютные пути к файлу?

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("", ""); 
    } 
} 
+0

Используйте 'StringBuilder' при создании' String's с помощью петель! – async

ответ

1

Вы перегибаете absoluteFilePath каждый раз в петле; попробовать с

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

Здесь должен использоваться «StringBuilder». – async

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, это еще проще.

+0

Я использовал 'String Builder', а также добавил' + 'к моей' String'. Я могу получить весь «абсолютный путь к файлу». – Rajeev

+0

@Rajeev OK, но это решение устарело в 2015 году. Больше не используйте 'File'. – fge

+0

Да, я тоже попробую свой метод. Спасибо за совет :) – Rajeev

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; 
} 
} 
Смежные вопросы