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

Java 如何从具有相似名称的多个.csv文件中读取数据?,java,csv,filereader,Java,Csv,Filereader,我在一个由许多其他文件组成的文件夹中有多个以CUSTOMER_YYYYMMDD.csv开头的文件(每个文件都有自己的日期)。我的脚本(使用了BufferedReader)已经可以从一个具体的文件中读取数据,但我只想从名为CUSTOMER_YYYYMMDD.csv的文件中获取数据,但我想不出该怎么做 以下是我得到的: public static void main(String[] args) { BufferedReader br = null; try {

我在一个由许多其他文件组成的文件夹中有多个以
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();
        }
    }
}

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

您可以使用获取文件夹/目录中文件的筛选列表。只需为过滤器提供一个实现—您可以根据正则表达式检查文件名。

首先,您应该获得目录中所有文件的列表。这可以通过创建目录的文件对象,然后调用
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;
}
公共静态列表parseForCsvFiles(字符串parentDirectory){
File[]filesInDirectory=新文件(parentDirectory).listFiles();
List fileList=new ArrayList();
for(文件f:filesInDirectory){
if(f.isDirectory()){
parseForCsvFiles(f.getAbsolutePath());
}
字符串filePath=f.getAbsolutePath();
字符串fileextension=filePath.substring(filePath.lastIndexOf(“.”+1,filePath.length());
如果(“csv”.equals(文件扩展)){
//添加到列表或数组中
添加(文件路径);
}
}       
返回文件列表;
}
试试这个:

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

与读取任何其他文件的方式完全相同。仅仅因为它们在磁盘上具有相似的名称,并不意味着它们在代码中的引用需要具有相同的名称。您需要首先筛选文件名。也许这个答案会有所帮助@SaurabhJhunjhunwala我想从所有以CUSTOMER.*******开头的文件中获取数据。请查看。您有一个类似的问题正确答案,但请检查FileNameFilter,如果(fileName.matches(“CUSTOMER\\\d*.csv”)返回true;也会更干净;)或者甚至更干净,
返回(fileName.matches(“CUSTOMER\\\d*.csv”)
,如果您想这样做的话。fileName.matches(“CUSTOMER\\\d*.csv”)对于名为CUSTOMER