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

时间:2015-09-08 13:38:56

标签: java csv filereader

我有多个文件以CUSTOMER_YYYYMMDD.csv开头(每个文件都有自己的日期)在一个由许多其他文件组成的文件夹中。我的脚本(使用BufferedReader)已经可以读取一个具体文件中的数据,但是我想从仅命名为CUSTOMER_YYYYMMDD.csv的文件中获取数据,但我不知道如何做到这一点。< / p>

这就是我所拥有的:

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();
        }
    }
}

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

首先,您应该获得目录中所有文件的列表。这可以通过创建目录的文件对象然后调用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
   }
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

首先获取文件夹中的所有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;
}

答案 4 :(得分:0)

试试这个:

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();
            }
        }
    }