首页 > 解决方案 > 我正在尝试按日期过滤文件

问题描述

我正在尝试按日期过滤文件并读取每个文件。我有一个读取每个文件名的 find() 方法,它返回一个以数组中“B”开头的文件。第二种方法filesort(),它将返回从find()方法发送的文件名中的所有文件日期。在主要方法中,我想在我给出的特定日期之前读取文件。如果所有文件的日期相同,则读取所有文件。但是,从文件中,其中一个文件具有不同的日期,它将引发错误。

public static String[] find(String rootPath){

   File root = new File(rootPath);
   // Filter files whose name start with "B"
   FilenameFilter beginswithm = new FilenameFilter() {
       public boolean accept(File directory, String filename) {
           return filename.startsWith("B");
       }
   };
   // array to store filtered file names
   String[] files = root.list(beginswithm);
   String[] no = { "nofile" };
   if (files == null) {
       return no;
   }  
   return files;

}

   public String filesort() throws ParseException {
   String path = "C:";
   String [] filesList = find(path);
   for (String file : filesList) {
       File st = new File(file);
       String name=st.getName();
       name= name.replaceAll("\\D+", "");
       String Datename = name.substring(0, 8);
       DateFormat formatter = new SimpleDateFormat("yyyymmdd");
       Date date = (Date)formatter.parse(Datename);
       SimpleDateFormat newFormat = new SimpleDateFormat("mm/dd/yyyy");
       String finalString = newFormat.format(date);
       return finalString;
   }
   return "error";

}

           public static void main(String[] args){
   String path = "C:";
   String [] filesList = find(path);
       for (String file : filesList) {
   if(filesort().equals("04/17/2019"))//to read all files that has 04/17/2018
    {
   reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(path + "//" +file))));
       String content;
       while ((content = reader.readLine()) != null) {
           System.out.println(content);
           }  
   }
       else if (!filesort().equals("04/17/2019")||filesort()==null ) {
           System.out.println("incorect date");
       }

}

this are the files I'm trying to read
 BProce.Arr.20190416.server10.gz
 BProce.Arr.20190417..ball10.gz
 BProce.Arr.20190417.ball23.gz

因为第一个文件是 04/16/2019,它会抛出不正确的日期。如果其中 3 个具有 04/17/2019,它将毫无问题地读取。但现在我只想读取日期为 04/17/2019 的文件

标签: javafiledategzip

解决方案


要查找名称以“B”开头并包含特定日期的文件,只需按照此过程。

您可以在类中使用此代码找到所有文件File

public File[] find(String path) {
    File dir = new File(path);
    File[] listOfFiles = null;
    if (dir.isDirectory()) {
         listOfFiles = dir.listFiles();
    }

    return fileList;
}

从此文件列表中,您可以获得文件名,然后检查此文件名以“B”开头并检查它是否包含特定日期。字符串对象有startsWith() 方法。您不需要将日期字符串更改为 Date 对象。只需检查文件名是否包含日期字符串。


推荐阅读