从包含多种文件类型java的目录中读取单个文件类型

时间:2014-10-28 17:25:24

标签: java file csv file-type multiple-files

是否可以从包含多种文件类型的目录(比如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
    }

}

请提出任何建议。

2 个答案:

答案 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;

}