如何使用Java从一个文件夹中的所有文件一一读取数据?

时间:2018-09-17 13:49:39

标签: java

如何使用Java从文件夹中的所有文件中读取数据(一对一)?

此代码仅返回文件名,我正在寻找更深的搜索:

File folder = new File("/home/user_name/Downloads/textfiles/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

3 个答案:

答案 0 :(得分:1)

只需使用java.nio,就可以在没有任何外部库的情况下进行操作。

过程如下:

代码将路径设为String,并从中创建一个java.nio.Path(在此示例中,使用常数String完成)。然后,它准备一个Map<String, List<Strings>,用于将文件名及其内容存储为每行一个String。之后,它将使用DirectoryStream<Path>从java.nio中读取目录内容到文件路径列表中,并将Files.readAllLines(Path path)读取的内容作为List<String>并存储绝对文件路径在Map中。

最后,它只是打印出所有已读取的内容,并用一行长破折号隔开...

只需尝试一下,也许对您的搜索很有帮助。

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class FileContentReader {

    private static final String FOLDER_PATH = "Y:\\our\\destination\\folder\\";

    public static void main(String[] args) {
        Path folderPath = Paths.get(FOLDER_PATH);

        // prepare a data structure for a file's name and content
        Map<String, List<String>> linesOfFiles = new TreeMap<String, List<String>>();

        // retrieve a list of the files in the folder
        List<String> fileNames = new ArrayList<>();
        try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(folderPath)) {
            for (Path path : directoryStream) {
                fileNames.add(path.toString());
            }
        } catch (IOException ex) {
            System.err.println("Error reading files");
            ex.printStackTrace();
        }

        // go through the list of files
        for (String file : fileNames) {
            try {
                // put the file's name and its content into the data structure
                List<String> lines = Files.readAllLines(folderPath.resolve(file));
                linesOfFiles.put(file, lines);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // finally, print everything
        linesOfFiles.forEach((String fileName, List<String> lines) -> {
            System.out.println("Content of " + fileName + " is:");
            lines.forEach((String line) -> {
                System.out.println(line);
            });
            System.out.println("————————————————————————————————");
        });
    }
}

答案 1 :(得分:0)

使用commons-io

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>


public static void main(String[] args) {
    try {
        File files = new File("\\home\\folder");
        for (File file : files.listFiles()) {
            List<String> lines = FileUtils.readLines(file);
            System.out.println();
            System.out.println();
            System.out.println("******" + file.getName());
            for (String line : lines) {
                System.out.println(line);
            }
            System.out.println(file.getName() + "******");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 2 :(得分:0)

Java 8的标准方法只是简单地迭代给定目录中的所有Path

Path inputDir = Paths.get("path/to/dir");
if (Files.isDirectory(inputDir)) {
    List<Path> filePaths = Files.list(inputDir).collect(Collectors.toList());
    for (Path filePath : filePaths) {
        // Load file contents...
    }
}

您放入循环中的内容取决于您的需求。您可以制作一个Reader,根据您要使用的内存量和性能要求等对它们进行流式处理,甚至对其进行内存映射。