java - 我正在尝试按日期过滤文件
问题描述
我正在尝试按日期过滤文件并读取每个文件。我有一个读取每个文件名的 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 的文件
解决方案
要查找名称以“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 对象。只需检查文件名是否包含日期字符串。
推荐阅读
- postgresql - 在 Postgreql 中,如何确定 postgres 表中的列是否为 LOB 类型,然后如何找到模式中最大 LOB 值的大小?
- json - 为什么我得到更新的 json 字段转换的信息 ZoneAwarePromise 数据
- flutter - 如何在一个选项卡中向另一个选项卡显示/隐藏浮动操作按钮?
- javascript - 身体和图像的大小差异
- python - 在同一行上的 pytorch-ignite ProgressBar 上编写验证指标
- flutter - Navigator of 和 Navigator pop 的区别
- flutter - 无法生成颤振 apk 文件
- java - 如何检查java字节大小是否超过数据库列大小
- python - 如何在 Python 中使用 OpenCV 删除绘制的对象?
- objective-c - Sprite Kit 中跨设备的缩放点