Как получить содержимое папки и поместить в ArrayList - PullRequest
33 голосов
/ 04 сентября 2011

Я хочу использовать

File f = new File("C:\\");

для создания ArrayList с содержимым папки.

Я не очень хорошо разбираюсь в буферизированных читателях, поэтому, пожалуйста, скажите, если это лучше.

Вот код, который у меня есть:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;


public class buffered_read {
public static void main(String[] args) {
    File f = new File("C:\\");
    int x = 0;
    boolean b = true;
    File list[];
    while(b = true){

    }
}
}

Спасибо, obiedog

Ответы [ 5 ]

70 голосов
/ 05 сентября 2011

Самый простой способ сделать это:

File f = new File("C:\\");
ArrayList<File> files = new ArrayList<File>(Arrays.asList(f.listFiles()));

А если вам нужен список имен:

File f = new File("C:\\");
ArrayList<String> names = new ArrayList<String>(Arrays.asList(f.list()));
28 голосов
/ 05 сентября 2011

Читали ли вы документацию API для java.io.File?

File f = new File("C:\\");
File[] list = f.listFiles();
4 голосов
/ 05 сентября 2011

Класс File предлагает метод listFiles() , который возвращает массив File всех файлов в текущей папке.

Чтобы создать из них ArrayList, вы можете использовать Arrays -класс и его asList() -метод . Смотри здесь .

Если вам нужны только имена файлов или пути в виде строк, есть также list() -метод , который возвращает массив строк. Чтобы преобразовать массив в ArrayList, выполните шаги, показанные в связанном вопросе.

2 голосов
/ 27 августа 2017

Потоки быстрые и легко читаемые:

final Path rootPath = Paths.get("/tmp");

// All entries Path objects
ArrayList<Path> all = Files
        .list(rootPath)
        .collect(Collectors.toCollection(ArrayList::new));

// Only regular files at Path objects
ArrayList<Path> regularFilePaths = Files
        .list(rootPath)
        .filter(Files::isRegularFile)
        .collect(Collectors.toCollection(ArrayList::new));

// Only regular files as String paths
ArrayList<String> regularPathsAsString = Files
        .list(rootPath)
        .filter(Files::isRegularFile)
        .map(Path::toString)
        .collect(Collectors.toCollection(ArrayList::new));
0 голосов
/ 25 апреля 2018

Если вы хотите получить все файлы рекурсивно, вы можете сделать что-то вроде ниже

public class FileLister {

    static List<String> fileList = new ArrayList<String>();

    public static void main(String[] args) {
        File file = new File("C:\\tmp");
        listDirectory(file);
        System.out.println(fileList);
    }

    public static void listDirectory(File file) {
        if(file.isDirectory()) {
            File[] files = file.listFiles();
            for(File currFile : files) {
                listDirectory(currFile);
            }
        }
        else {
            fileList.add(file.getPath());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...