是否可以从包含多种文件类型的目录(比如cvs,txt,doc,xml,html等)中读取单一类型的文件(比如CSV或txt)。
我的问题是我必须提供mainDirectory的路径作为输入,其中还包含子目录层。当我进一步深入研究时,我特别需要在这些目录中阅读和处理CSV文件。
我完成了使用递归礼貌的多层文件夹遍历,我有mainDirectory中文件的名称和总数。我也完成了读取和CSV文件的逻辑。我需要做的只是获取CSV文件的路径并处理它们。
我使用下面提到的代码来遍历多个文件夹并获取名称: -
package org.ashu.input;
import java.io.File;
/**
*
* @author ashutosh
*/
public class MultiDir {
private int fileCount;
public void readFile(File f){
System.out.println(f.getPath());
fileCount++;
}
public void readDir(File f){
File subdir[] = f.listFiles();
for(File f_arr : subdir){
if(f_arr.isFile()){
this.readFile(f_arr);
}
if(f_arr.isDirectory()){
this.readDir(f_arr);
}
}
}
public static void main(String[] args){
MultiDir md = new MultiDir();
File mainDir = new File("/Users/ashutosh/Downloads/main_directory");
md.readDir(mainDir);
System.out.println(md.fileCount);//all file count = 1576, need to specifically get CSV
}
}
请提出任何建议。
答案 0 :(得分:0)
您只需在readDir()方法中检查文件的扩展名即可。下面查找jpg,您可以使用所需的扩展名
public void readDir(File f){
File subdir[] = f.listFiles();
for(File f_arr : subdir){
if(f_arr.isFile() && f_arr.getName().endsWith(".jpg")){
this.readFile(f_arr);
}
if(f_arr.isDirectory()){
this.readDir(f_arr);
}
}
}
答案 1 :(得分:0)
此代码将返回与给定扩展名匹配的所有文件(在您的情况下为 .csv ):
public static List<File> getFiles(String extension, final File folder)
{
extension = extension.toUpperCase();
final List<File> files = new ArrayList<File>();
for (final File file : folder.listFiles())
{
if (file.isDirectory())
files.addAll(getFiles(extension, file));
else if (file.getName().toUpperCase().endsWith(extension))
files.add(file);
}
return files;
}