如何获取文件夹的内容并放入ArrayList中

38

我想使用

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

创建一个ArrayList来保存文件夹中的内容。

我不太擅长使用BufferedReader,如果有更好的方法,请告诉我。

以下是我目前拥有的代码:

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


1
可能是如何在Java中获取文件和文件夹信息?的重复问题。 - user177800
2
听起来有点像作业...尝试使用File.list()。 - Janick Bernet
5个回答

77

最简单的方法是:

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()));

4
文件 API 是否会自动递归进入子文件夹? - blong
1
@blong 不是的。File.listFiles()只会列出给定目录中的内容。要进行递归列表,请参见https://dev59.com/52Uq5IYBdhLWcg3wPd6r#14676464或https://dev59.com/vHE85IYBdhLWcg3w8IXK#2534643。 - scai
非常感谢@scai提供的信息!干杯 :) - blong
奇怪的是,Paths.get(p.getParent()).listFiles()File parentFile = p.toFile().getParentFile().listFiles() 都返回 null。 - Sridhar Sarnobat

30

为您重新上传。好答案。 - Max

4
File-class提供了一个listFiles()-method方法,该方法返回当前文件夹中所有文件的File数组。
要创建一个ArrayList,您可以使用Arrays-class和它的asList()-method方法。请在这里查看。
如果你只需要文件名或路径作为字符串,也可以使用list()-method方法,它将返回一个字符串数组。要将数组转换为ArrayList,请按照链接问题中所示的步骤进行操作。

3

流是快速且非常容易阅读的:

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
如果您想递归地检索所有文件,可以执行以下操作:
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());
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接