我编写了一个 Java 程序来监视目录的变化。我保留了一个文件列表(String[]),并且每隔 x 秒我得到一个新列表并比较它们以查找添加了哪些文件以及删除了哪些文件。
问题是,如果我重命名一个文件,它会显示为删除具有旧名称的文件,然后显示为添加具有新名称的文件。
我可以做些什么来跟踪名称更改?
编辑:我想为 Java 6 找到一个解决方案。代码:
public void run() {
int ok;
while(true) {
// verify if modified from last check
if(modified != file.lastModified()) {
Date d = new Date();
list = file.list();
// look for new files
for(String x : list) {
ok = 0;
for(String y : old) {
if(x.equals(y)) {
ok = 1;
}
}
if(ok == 0) {
display.setText(display.getText() + "Created file " + x + " at " + d.toString() + "\n");
}
}
// looking for old files
for(String x : old) {
ok = 0;
for(String y : list) {
if(x.equals(y)) {
ok = 1;
}
}
if(ok == 0) {
display.setText(display.getText() + "Deleted file " + x + " at " + d.toString() + "\n");
}
}
}
old = file.list();
modified = file.lastModified();
try {
Thread.sleep(f * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
另外,在这段代码中,如果我想写 old = list (保留最后一个列表),我会得到一个NullPointerException
at line for(String y : old)
。为什么?