java 删除N天前数据

本文提供了一个使用Java编程语言实现的清理过期文件的代码示例,包括如何使用FileUtils类来列出目录下的文件,以及如何通过正则表达式匹配特定类型的文件,并判断文件是否超过指定天数的过期时间。最后,代码演示了如何删除过期的文件。

public static void main(String[] args) {
File dir = new File("c:/test");
String matchName = "test.*\\.txt";
int keepDays = 5;
boolean recursive = true;
removeOldFile(dir, recursive, matchName, keepDays);
}



private static void removeOldFile(File dir, boolean recursive, String matchName,
int keepDays) {
DecimalFormat df = new DecimalFormat("0.00");
String[] extensions = null;
Collection<File> files = FileUtils.listFiles(dir, extensions, recursive);
long currentTime = System.currentTimeMillis();
for (File f : files) {
String oneFileName = f.getName();
// System.out.println(oneFileName + ":" + oneFileName.matches(matchName));
if(oneFileName.matches(matchName)) {
long fileLastModified = f.lastModified();
long timeGap = currentTime - fileLastModified;
System.out.println("timeGap for file:" + f.getAbsolutePath() + " is " + df.format(timeGap / 1000.0 / 24 / 3600) + " day");
if(timeGap > keepDays * 24L * 3600 * 1000) {
System.out.println("begin to delete file:" + f.getAbsolutePath());
if(!f.delete()) {
throw new RuntimeException("delete file failed:" + f.getAbsolutePath());
}
}
}
}
}
### 删除指定日期之的 SQLite3 数据 在 SQLite 中,可以通过 `DELETE` 语句配合日期函数来实现删除指定日期之数据。以下是具体的实现方法: #### 使用 SQL 语法删除 N 数据 可以利用 SQLite 提供的内置日期和时间函数 `date()` 和 `datetime()` 来动态计算目标日期并执行删除操作。 ```sql DELETE FROM table_name WHERE date_column < date('now', '-' || ? || ' days'); ``` 上述代码中的 `?` 是占位符,用于绑定参数值(如要删除数据)。通过这种方式能够安全地传递变量[^1]。 如果需要硬编码数,则可以直接写入数值: ```sql DELETE FROM GpsData WHERE CreateTime < date('now', '-7 day'); ``` 此语句会删除 `GpsData` 表中所有早于当时间 7 的记录[^2]。 #### 动态调整日期范围 对于更复杂的场景,比如只删除某个特定时间段内的数据,可采用以下形式: ```sql DELETE FROM GpsData WHERE CreateTime BETWEEN '固定起始时间' AND datetime('now', 'localtime', '-1 day'); ``` 这里的 `'固定起始时间'` 可替换为实际业务逻辑所需的最早边界值。 #### Java 实现示例 当结合编程语言(例如 Java)调用时,推荐使用预编译语句以增强安全性与性能: ```java public void deleteOldData(SQLiteDatabase db, int daysBefore) { String sql = "DELETE FROM GpsData WHERE CreateTime < date('now', ?)"; SQLiteStatement stmt = db.compileStatement(sql); stmt.bindString(1, "-" + daysBefore + " days"); stmt.executeUpdateDelete(); } ``` 以上片段展示了如何将外部输入的安全传参至 SQL 查询之中[^4]。 --- ### 注意事项 - **索引优化**: 如果频繁执行此类删除操作,建议为目标字段建立索引来提升效率。 - **事务管理**: 对大规模数据集进行清理时考虑包裹整个过程在一个显式的事务里以便控制一致性[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值