Java 将当前日期时间(live)与上次修改的文件进行比较

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

我希望我的程序输出,这样,每当它从客户端接收到一个文本文件时,它都会打印“一个新文件已被接收!”。文本文件将存储在C:/Users/%UserProfile%/Desktop/ad中

下面的代码用于检查是否已将新文本文件接收到 目录

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类