2013-10-04 5 views
2

Существует папка: C:\\Users\..myfolderКак пропустить все файлы в папке (если имена файлов неизвестны)?

Он содержит .pdf файлов (или любые другие, скажем, .csv). Я не могу изменить имена этих файлов, и я не знаю количество этих файлов. Мне нужно зацикливать все файлы по одному. Как я могу это сделать?

(я знаю, как это сделать, если я знал имена)

+4

Посмотрите на методы класса 'File', все, что вам нужно, либо находится, либо ссылается на них. –

+2

java.io.File список ... –

ответ

3

Просто используйте File.listFiles

final File file = new File("whatever"); 
for(final File child : file.listFiles()) { 
    //do stuff 
} 

Вы можете использовать FileNameExtensionFilter фильтровать файлы слишком

final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("N/A", "pdf", "csv"//, whatever other extensions you want); 
final File file = new File("whatever"); 
for (final File child : file.listFiles()) { 
    if(extensionFilter.accept(child)) { 
     //do stuff 
    } 
} 

Досадно FileNameExtensionFilter поставляется с пакетом javax.swing, поэтому его нельзя использовать непосредственно в listFiles() api, это еще более удобно nt, чем реализовать фильтр расширения файлов самостоятельно.

+0

спасибо. Особенно для дополнительного фильтра ... – Buras

+0

Вместо этого используйте FileFilter, затем используйте File.listFiles (FileFilter). Например, ваш FileFilter может проверить, что каждый элемент, действительно, является файлом и проверяет расширение. – rob

+0

@rob Прочитайте последнюю часть ответа, нет никакой готовой реализации фильтра расширения в этом api, поэтому в письменной форме мало смысла. –

3

File.listFiles() дает вам массив файлов в папке. Затем вы можете разбить имена файлов, чтобы получить расширение и проверить, является ли оно .pdf.

File[] files = new File("C:\\Users\..myfolder").listFiles(); 
for (File file : files) { 
    if (!file.isFile()) continue; 

    String[] bits = file.getName().split("."); 
    if (bits.length > 0 && bits[bits.length - 1].equalsIgnoreCase("pdf")) { 
     // Do stuff with the file 
    } 
} 
+0

Используйте File.listFiles (FilenameFilter) или File.listFiles (FileFilter), чтобы обрабатывать только те результаты, которые имеют определенные свойства, такие как расширение имени файла. – rob

+0

@BoristheSpider: Изменен. – user2827100

+0

String [] bits = file.getName(). Split ("\\."); –

2

Вы можете использовать Java.io.File.listFiles() метод, чтобы получить список всех файлов и папок внутри папки.

3

Таким образом, вы можете иметь больше возможностей, попробуйте Java 7 NIO способ сделать это

public static void main(String[] args) throws Exception { 
    try (DirectoryStream<Path> files = Files.newDirectoryStream(Paths.get("/"))) { 
     for (Path path : files) { 
      System.out.println(path.toString()); 
     } 
    } 
} 

Вы также можете предоставить фильтр для дорожек в виде DirectoryStream.Filter реализации

public static void main(String[] args) throws Exception { 
    try (DirectoryStream<Path> files = Files.newDirectoryStream(Paths.get("/"), 
     new DirectoryStream.Filter<Path>() { 
      @Override 
      public boolean accept(Path entry) throws IOException { 
       return true; // or whatever you want 
      } 
     }) 
    ) { 

     for (Path path : files) { 
      System.out.println(path.toString()); 
     } 
    } 
} 

Очевидно, вы можете извлечь анонимный класс для объявления фактического класса.

Обратите внимание, что это решение не может вернуть null, как решение listFiles().

Для рекурсивного решения ознакомьтесь с интерфейсом FileVisitor. Для соответствия пути используйте интерфейс PathMatcher, а также FileSystems и FileSystem. Есть примеры, которые плавают вокруг Stackoverflow.

Смежные вопросы