如何从多个具有相似名称的 .csv 文件中读取数据?

How to read data from multiple .csv files with similar names?

我在一个包含许多其他文件的文件夹中有多个以 CUSTOMER_YYYYMMDD.csv 开头的文件(每个文件都有自己的日期)。我的脚本(使用 BufferedReader)已经可以从一个具体文件中读取数据,但我想从仅命名为 CUSTOMER_YYYYMMDD.csv 的文件中获取数据,但我想不出该怎么做。

这是我得到的:

public static void main(String[] args) 
{

    BufferedReader br = null;

    try {

        String line;

        br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/CUSTOMER_20150401.csv"));

        //Nacita hlavicku CSV failu aby ji preskocit
        br.readLine();

        // Cteni failu radek po radku
        while ((line = br.readLine()) != null) {
        //  System.out.println("Raw CSV data: " + line);
            System.out.println("Customer: " + csvToArray(line) + "\n");
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null) br.close();
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }
}

将你上面的代码块变成一个方法,该方法接受一个参数作为要读取的文件名。然后你所要做的就是为你想阅读的任何其他文件调用你的方法。

您可以使用 File#listFiles(FilenameFilter) 在 folder/directory 中获取过滤后的文件列表。只需提供过滤器的实现 - 您可以根据正则表达式检查文件名。

首先,您应该获得目录中所有文件的列表。这可以通过创建目录的文件对象然后调用 list() 方法来完成。

File myDirectory = new File(/path/to/my/dir/);
String[] containingFileNames = myDirectory.list();

之后您可以遍历所有文件名并检查名称是否与模式匹配 CUSTOMER_YYYYMMDD.csv

for (String fileName : containingFileNames) {
   if (fileName.matches("CUSTOMER_\d*.csv") {
      // Read this file with the BufferedReader like in your code above
   }
}

首先获取文件夹中的所有CSV文件。然后递归读取它们。下面给出了获取文件夹中所有 CSV 文件的示例代码。

 public static List<String> parseForCsvFiles(String parentDirectory){
    File[] filesInDirectory = new File(parentDirectory).listFiles();
    List<String> fileList = new ArrayList<String>();
    for(File f : filesInDirectory){
        if(f.isDirectory()){
            parseForCsvFiles(f.getAbsolutePath());
        }
        String filePath = f.getAbsolutePath();
        String fileExtenstion = filePath.substring(filePath.lastIndexOf(".") + 1,filePath.length());
        if("csv".equals(fileExtenstion)){
            //add to a list or array
            fileList.add(filePath);
        }

    }       
  return fileList;
}

试试这个:

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    File folder = new File("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/");
    for(File file: folder.listFiles()){
        String name = file.getName();
        if(name.startsWith("CUSTOMER_")){
            String date = name.replace("CUSTOMER_", "");
            BufferedReader br = null;
            try{
                String line;

                df.parse(date);
                br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/"+ name));

                //Nacita hlavicku CSV failu aby ji preskocit
                br.readLine();

                // Cteni failu radek po radku
                while ((line = br.readLine()) != null) {
                //  System.out.println("Raw CSV data: " + line);
                    System.out.println("Customer: " + csvToArray(line) + "\n");
                }
            }catch(ParseException ex){
                // Wrong date format.
            } finally {
                br.close();
            }
        }
    }