【问题标题】:How to read multiple csv files from a folder in java?如何从java中的文件夹中读取多个csv文件?
【发布时间】:2015-03-29 22:35:08
【问题描述】:

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

> conf/files

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

> conf/files/sample.csv

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

【问题讨论】:

  • This 应该对你有用。
  • 嗨,我试过这样 csvFIlePath 是 "conf/files" File dir = new File(csvFilePath);文件[] listOfFiles = dir.listFiles();但我将 listOfFiles 设为 null...
  • @Swapnil1988:所以让我们知道你的发现。使用上面的代码后你得到了什么结果?
  • 文件列表为空......当我喜欢上面的时候

标签: java file csv file-io


【解决方案1】:
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);

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

【讨论】:

    【解决方案2】:

    如果您使用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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 2018-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-09
          • 1970-01-01
          • 2022-10-21
          相关资源
          最近更新 更多