прочитать весь файл в папке - PullRequest
3 голосов
/ 25 февраля 2011

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

Иначе есть ли способ сделать файл регулярных выражений прочитанным в Java? Таким образом, если все файлы в папке все начинаются с gh001_12312, gh002_12312, gh003_12911, gh004_22222, gh005_xxxxx и т. Д.

Ответы [ 3 ]

5 голосов
/ 25 февраля 2011

Стандартная библиотека Java предоставляет способ получения массива File элементов, находящихся в каталоге, через File # listFiles .В основном:

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles();

Кроме того, существует перегруженный метод, позволяющий указать фильтр, который можно использовать для удаления элементов, возвращаемых в списке.

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
    public boolean accept(File file) {
        if (file.isFile()) {
           //Check other conditions
           return true;
        }
        return false;
    }
});

Если вы хотитечтобы выполнить некоторую фильтрацию по имени файла, взгляните на String , Pattern и Matcher .Если вы знаете, что будут только файлы, или файлы будут следовать определенному соглашению об именах, есть также опции File.listFiles(FilenameFilter), которые предоставляют только строку, представляющую имя файла.

3 голосов
/ 25 февраля 2011

Вы можете использовать комбинацию следующих методов из commons-io . Первый метод дает вам возможность рекурсивно перебирать все файлы в каталоге, которые соответствуют определенному расширению (есть другой перегруженный метод, который позволяет вам предоставить свой собственный фильтр). Второй метод читает все содержимое файла как объект String.

Iterator<File> iterateFiles(File directory,
                                          String[] extensions,
                                          boolean recursive)
String readFileToString(File file)
                               throws IOException
1 голос
/ 25 февраля 2011

Я повторно использую код @Tim Bender здесь:

Сначала получите список всех необходимых файлов, как показано @Tim Bender (для полноты показан здесь снова). И никакие сторонние библиотеки не нужны.

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
    public boolean accept(File file) {
        if (file.isFile()) {
           //Check other conditions
           return true;
        }
        return false;
    }
});

Теперь итерируйте по этому массиву и используйте java.nio API для чтения файлов за один раз (без br.readLine())

public StringBuilder readReplaceFile(File f) throws Exception
{
    FileInputStream fis = new FileInputStream(f);
    FileChannel fc = fis.getChannel();

    int sz = (int)fc.size();
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);

    CharBuffer cb = decoder.decode(bb);

    StringBuilder outBuffer = new StringBuilder(cb);
    fc.close();
    return outBuffer;
}

Надеюсь, эта помощь

...