简体   繁体   English

用Java从不同文件夹中读取多个文件

[英]Read multiple files from different folders in Java

What is the best way for parsing multiple files from multiple directories?从多个目录解析多个文件的最佳方法是什么?

I have a folder that contains 51 sub folders and each sub folder contains 100 files.我有一个包含 51 个子文件夹的文件夹,每个子文件夹包含 100 个文件。

I know how to scan one single file using我知道如何使用扫描单个文件

File dataFile = new File("A.txt");
    scan = new Scanner (dataFile);

    while (scan.hasNext()){ 
        System.out.print(scan.next() + "\t");
    }

but how to generalize this to read from the different directories ?但是如何将其概括为从不同的目录中读取?

You should use a FileVisitor (which is an interface you implement) and then put it to work using Files.walkFileTree(Path path, FileVisitor visitor).您应该使用 FileVisitor(这是您实现的接口),然后使用 Files.walkFileTree(Path path, FileVisitorvisitor) 使其工作。 In your case you can just subclass the SimpleFileVisitor class:在您的情况下,您可以子类化 SimpleFileVisitor 类:

import static java.nio.file.FileVisitResult.*;

public static class PrintFiles
    extends SimpleFileVisitor<Path> {

    @Override
    public FileVisitResult visitFile(Path file,
                                   BasicFileAttributes attr) {
        if (attr.isSymbolicLink()) {
            System.out.format("Symbolic link: %s ", file);
        } else if (attr.isRegularFile()) {
            System.out.format("Regular file: %s ", file);
        } else {
            System.out.format("Other: %s ", file);
        }
        System.out.println("(" + attr.size() + "bytes)");
        return CONTINUE;
    }

}
 void recursiveParse(String directory){
    for(File fileOrFolder : directory.listFiles()){
       if(fileOrFolder.isDirectory()){
          for (String singleFileOrFolder : fileOrFolder.listFiles()){
             recursiveParse(singleFileOrFolder); 
       }
       else{
          // parse the file
       }
    }
}

It only works for a folder that contains subdirectories and each subdirectory doesn't contain subdirectories:它仅适用于包含子目录且每个子目录不包含子目录的文件夹:

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
class ScanFilesInSubFolders {
        public static void main(String[] args) throws IOException {
                System.out.println("Enter the path to search");          

                Scanner scanner = new Scanner(System.in);
                String folderPath = scanner.next();
                File [] files1 = null;
                File folder = new File(folderPath);
                if (folder.isDirectory()) {
                        File[] listOfFiles = folder.listFiles();                 
                        for (File file : listOfFiles) {
                               if(file.isDirectory()) {
           files1 = file.listFiles();  
            for(File file2 : files1)
            {
    Scanner file3 = new Scanner (file2);
    while (file3.hasNext()){ 
        System.out.print(file3.next() + "\t");
    }   
        System.out.print("\n");
            }
}
                        }
                }
        }
}

Here you go :干得好 :

public static void main (String[] args) throws Exception{

          ReadThroughFolders rf = new ReadThroughFolders();
            //C:\\Users\\username\\Desktop\\DOC\\COUNTRIES
          File MainDirectory = new File("C:\\Users\\username\\Desktop\\DOC\\COUNTRIES");
          rf.readDir(MainDirectory);

        }

        private void readDir(File f) throws Exception{

            Set<String>set = new TreeSet<String>();
            File []subdir = f.listFiles();
            int count = 0;
            for (File fi : subdir){

                if(fi.isFile()){

                    BufferedReader br = new BufferedReader(new FileReader(fi));
                    String line;
                    while((line = br.readLine())!= null){
                        set.add(line);                  
                    }
                    br.close();
                    count++;
                    System.out.println("reding file ----------------");
                    System.out.println(fi.getName());
                }
                String dir = f.getName();
                System.out.println("****** "+dir);
                dir = dir+".txt";
                if(subdir.length-(count) == 0){
                    System.out.println("end of directory"+dir);
                    count = 0;
                    print(set, dir);
                    set = new TreeSet<String>();
                }
                if(fi.isDirectory()){
                    //System.out.println("inside if check directory");
                    readDir(fi);
                    System.out.println("reading next directory");


                }
            }
        }

The method will read the files in the different folders in your root folder.该方法将读取根文件夹中不同文件夹中的文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM