Java 将当前日期时间(live)与上次修改的文件进行比较
我希望我的程序输出,这样,每当它从客户端接收到一个文本文件时,它都会打印“一个新文件已被接收!”。文本文件将存储在C:/Users/%UserProfile%/Desktop/ad中 下面的代码用于检查是否已将新文本文件接收到 目录Java 将当前日期时间(live)与上次修改的文件进行比较,java,file,date,timer,Java,File,Date,Timer,我希望我的程序输出,这样,每当它从客户端接收到一个文本文件时,它都会打印“一个新文件已被接收!”。文本文件将存储在C:/Users/%UserProfile%/Desktop/ad中 下面的代码用于检查是否已将新文本文件接收到 目录 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.text.DateFormat; import jav
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Timer;
public class Test {
final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
static int count = 0;
static File[] f = null;
static Date date = new Date();
static Calendar now = null;
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
while(true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
f = new File("C:/Users/roberts/Desktop/ad").listFiles();
int l = f.length;
System.out.println("There are " + l + " files in the directory");
for (int i = 0; i < l; i++) {
System.out.println("file " + i + " date modified " + dateFormat.format(f[i].lastModified()));
}
}
}
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.File;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Date;
导入javax.swing.Timer;
公开课考试{
最终日期格式DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
静态整数计数=0;
静态文件[]f=null;
静态日期=新日期();
静态日历现在=空;
公共静态void main(字符串[]args){
DateFormat DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
while(true){
试一试{
《睡眠》(2000年);
}捕捉(中断异常e1){
e1.printStackTrace();
}
f=新文件(“C:/Users/roberts/Desktop/ad”).listFiles();
int l=f.长度;
System.out.println(“目录中有“+l+”文件”);
对于(int i=0;i
初始为1且上次修改的目录中文件总数的输出
收到文件后目录中文件总数的输出=2,最后一次修改
现在,为了打印“已收到新文件!”我需要将当前日期时间与文件的上次修改日期时间进行比较
这就是我所做的
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Timer;
public class Test {
final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int interval = 1000;
static int count = 0;
static File[] f = null;
static Date date = new Date();
static Calendar now = null;
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
while(true) {
f = new File("C:/Users/roberts/Desktop/ad").listFiles();
int l = f.length;
System.out.println(l);
new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
now = Calendar.getInstance();
for (int i = 0; i < l; i++) {
if(dateFormat.format(now.getTime()).equals(dateFormat.format(f[i].lastModified()))) {
System.out.println("A new file has been received!");
}
}
}
}).start();
try {
Thread.currentThread().join();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.File;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.Calendar;
导入java.util.Date;
导入javax.swing.Timer;
公开课考试{
最终日期格式DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
整数区间=1000;
静态整数计数=0;
静态文件[]f=null;
静态日期=新日期();
静态日历现在=空;
公共静态void main(字符串[]args){
DateFormat DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
while(true){
f=新文件(“C:/Users/roberts/Desktop/ad”).listFiles();
int l=f.长度;
系统输出打印LN(l);
新计时器(1000,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
现在=Calendar.getInstance();
对于(int i=0;i
我试过了,但它没有打印“已收到新文件!”。请帮助监视文件系统更改最好使用。现在您正在轮询文件更改,但监视服务使用本机windows事件 首先,您只需要创建
WatchService
类的实例
Path path = Paths.get("c:\mydir");
WatchService service = path.getFileSystem().newWatchService();
接下来,您必须决定要监视的事件类型。我认为您只希望在文件夹中出现新文件时收到通知
path.register(service, StandardWatchEventKinds.ENTRY_CREATE);
接下来,服务
充当事件缓冲区。我建议将这个缓冲区的处理放在一个单独的线程中
// repeat forever
for (;;)
{
// this will block until there's something inside the buffer
WatchKey key = service.take();
// 1 watchkey can contain multiple events, you need to iterate these.
for (WatchEvent<?> event : key.pollEvents())
{
//todo: handle events
}
}
//永远重复
对于(;;)
{
//这将阻塞,直到缓冲区中有东西为止
WatchKey=service.take();
//1 watchkey可以包含多个事件,您需要迭代这些事件。
for(WatchEvent事件:key.pollEvents())
{
//todo:处理事件
}
}
这是因为while(true)
循环不会循环,因此检查目录大小的代码只工作一次,变量l
保持不变。通过调用thread.currentThread().join()
(当前线程会一直阻塞,直到当前线程停止,即永远)。计时器
每1000毫秒触发一次,但由于l
没有改变,因此它找不到新文件
如果您只想观察目录的变化,而不是重新发明轮子,那么最好使用标准的JDK类