如何从java中的文件夹中读取多个csv文件?

时间:2015-01-30 12:36:10

标签: java file csv file-io

我想从java中的文件夹中读取多个csv文件。所有文件都是csv并且格式相同,但问题是我得到的文件夹的路径是这样的。

> conf/files

这是我所有csv文件所在的文件夹。我有一个程序,当路径给出时读取单个文件,如

> conf/files/sample.csv

如果我能得到这样的文件名列表,我可以阅读所有这些。请帮忙......

4 个答案:

答案 0 :(得分:2)

List<String> filenames = new LinkedList<String>();
public void listFilesForFolder(final File folder) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            if(fileEntry.getName().contains(".csv"))
                filenames.add(fileEntry.getName())
        }
    }
}

final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);

这样,只需循环遍历文件名列表,并访问您已经知道的方式

答案 1 :(得分:0)

如果您使用FileFilterFileNameFilter,您可以获取以后迭代的文件列表,也可以对accept方法中的每个文件执行某些操作。

String path = "conf/files";

File [] files = new File(path).listFiles(new FileFilter() {
    @Override
    public boolean accept(File path) {
        if(path.isFile()) {
            //Do something with a single file
            //or just return true to put it in the list
            return true;
        }
        return false;
    }
}); 
//Do something with the list of files

答案 2 :(得分:0)

使用lambda表达式可以在一行中实现解决方案:

File [] files = new File("path/to/folder/").listFiles(obj -> obj.isFile() && obj.getName().endsWith(".csv"));

答案 3 :(得分:-1)

Another way to read all .csv file in your folder directory by directory.

String inputFolder = "E:\\CSVFiles\\take";//input path where you read the file 
File folder = new File(inputFolder); 
List<String> listOfFiles=listDirectory(folder, 0);  //0 is the level where we start reading

//This method for Reading the file in directory manner(folder under folder all the csv)
private static List<String> listDirectory(File file, int level) {

    List<String> lstFiles = new ArrayList<String>();

    File[] firstLevelFiles = file.listFiles();
    if (firstLevelFiles != null && firstLevelFiles.length > 0) {
     for (File aFile : firstLevelFiles) {
      if (aFile.isDirectory() && !"ProcressedEMLs".equalsIgnoreCase(aFile.getName())
        && !"FailedEMLs".equalsIgnoreCase(aFile.getName())) {
       lstFiles.addAll(listDirectory(aFile, level + 1));
      } else if (!aFile.isDirectory()) {
       if (aFile.toString().toLowerCase().endsWith(".csv")) {
        lstFiles.add(aFile.getAbsolutePath());
       }
      }
     }
    }
    firstLevelFiles = null;
    return lstFiles;
}