如何在多个文件夹的文件夹中打开和显示多个文件的内容?

时间:2018-05-02 21:55:17

标签: java java-8

我有多个文件的文件夹。这就是组织的方式。

import csv
from collections import defaultdict

neighbours = defaultdict(set)

with open('input.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        neighbours[row['source']].add(row['neighbour'])
        neighbours[row['neighbour']].add(row['source'])

with open('output.csv', 'w') as f:
    writer = csv.writer(f)
    # Write the header
    writer.writerow(['source', 'neighbours'])

    # Write the data
    for key, values in neighbours.items():
        writer.writerow([key, ','.join(values)])

我必须打开每个文件夹,读取每个文件,然后对每个文件夹的所有文件执行一些计算并显示结果,然后移动到下一个文件夹并对这些文件夹的文件执行相同的计算。以下是我的代码。还有其他更简单的方法吗?我的代码非常慢,有时甚至无法正常工作。

Folder_1
  - Folder_1_File_1
  - Folder_1_File_2
  - Folder_1_File_3
  - Folder_1_File_4
  ...
Folder_2
  - Folder_2_File_1
  - Folder_2_File_2
  - Folder_2_File_3
  - Folder_2_File_4
  ...
Folder_3
  - Folder_3_File_1
  - Folder_3_File_2
  - Folder_3_File_3
  - Folder_3_File_4
  ...

2 个答案:

答案 0 :(得分:4)

Java 8引入了基于访问者的Files.walkFileTree() api,它更容易掌握:

File file = new File("/base/folder");
Files.walkFileTree(file.toPath(), new SimpleFileVisitor<>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        // do your thing here
        return FileVisitResult.CONTINUE;
    }
});

答案 1 :(得分:1)

此代码将首先为您提供常规文件(而不是文件夹),以及给定路径树的其余部分。

public class ReadRecurssivelyFromFolder {


public static void main(String[] args) {
    try {
        Files.walk(Paths.get("/home/rafik/test" ))
                .filter(Files::isRegularFile)
                .forEach(System.out::println);

    } catch (IOException ex) {
        Logger.getLogger(ReadRecurssivelyFromFolder.class.getName()).log(Level.SEVERE, null, ex);
    }
}

输出:

enter image description here

然后,您可以根据给定的路径执行计算。