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

从Java中的不同文件夹读取多个文件,java,parsing,Java,Parsing,解析来自多个目录的多个文件的最佳方法是什么 我有一个包含51个子文件夹的文件夹,每个子文件夹包含100个文件 我知道如何使用 File dataFile = new File("A.txt"); scan = new Scanner (dataFile); while (scan.hasNext()){ System.out.print(scan.next() + "\t"); } 但是如何将其推广到从不同的目录中读取呢?您应该使用FileVisit

解析来自多个目录的多个文件的最佳方法是什么

我有一个包含51个子文件夹的文件夹,每个子文件夹包含100个文件

我知道如何使用

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

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

但是如何将其推广到从不同的目录中读取呢?

您应该使用FileVisitor(这是您实现的一个接口),然后使用Files.walkFileTree(路径,FileVisitor-visitor)使其工作。 在您的情况下,您可以将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;
    }

}
导入静态java.nio.file.FileVisitResult.*;
公共静态类打印文件
扩展SimpleFileVisitor{
@凌驾
公共文件VisitResult visitFile(路径文件,
基本文件属性(属性属性属性){
if(attr.isSymbolicLink()){
System.out.format(“符号链接:%s”,文件);
}else if(attr.isRegularFile()){
System.out.format(“常规文件:%s”,文件);
}否则{
System.out.format(“其他:%s”,文件);
}
System.out.println(“(“+attr.size()+”字节)”);
继续返回;
}
}

它仅适用于包含子目录的文件夹,而每个子目录不包含子目录:

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");
            }
}
                        }
                }
        }
}
给你:

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


                }
            }
        }
publicstaticvoidmain(字符串[]args)引发异常{
ReadThroughFolders rf=新的ReadThroughFolders();
//C:\\Users\\username\\Desktop\\DOC\\COUNTRIES
File MainDirectory=新文件(“C:\\Users\\username\\Desktop\\DOC\\COUNTRIES”);
rf.readDir(主目录);
}
私有void readDir(文件f)引发异常{
设置集=新树集();
File[]subdir=f.listFiles();
整数计数=0;
对于(文件fi:subdir){
if(fi.isFile()){
BufferedReader br=新的BufferedReader(新文件读取器(fi));
弦线;
而((line=br.readLine())!=null){
设置。添加(行);
}
br.close();
计数++;
System.out.println(“reding文件----------------------”;
System.out.println(fi.getName());
}
String dir=f.getName();
System.out.println(“*******”+dir);
dir=dir+“.txt”;
如果(细分长度-(计数)=0){
System.out.println(“目录结尾”+dir);
计数=0;
打印(设置,直接);
set=新树集();
}
if(fi.isDirectory()){
//System.out.println(“内部if检查目录”);
readDir(fi);
System.out.println(“读取下一个目录”);
}
}
}

该方法将读取根文件夹中不同文件夹中的文件。

问题相当广泛。您可以首先使用
java.io.File
来表示主要输入,这将允许您使用
File#listFiles
列出目录的内容,并将每个匹配项传递给一个方法。您还可以查看并使用它来处理您的文件。根据您的需求,您甚至可以考虑使用某种代码> ExcutoService < /代码>,以允许同时处理多个文件。
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");


                }
            }
        }