从Java中的不同文件夹读取多个文件
解析来自多个目录的多个文件的最佳方法是什么 我有一个包含51个子文件夹的文件夹,每个子文件夹包含100个文件 我知道如何使用从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
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");
}
}
}