监控文件目录的变化

zyxsgq 2003-07-08 09:56:21
现在在做一个监控目录变化的程序,如何判断一个目录中拷贝进新文件,及如何判断目录下删除文件,我这个程序是定时查看目录的(例如相隔1分钟)
...全文
1317 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lion_boy 2003-07-09
  • 打赏
  • 举报
回复
import java.lang.*;
import java.util.*;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;
import java.io.*;
import java.awt.*;
import java.net.*;
import javax.swing.*;


public class DirWatcher implements Runnable{
private MainFrame mf;
private String dir;
private Vector newList;
private Vector oldList;
private Vector tempList;
private int timeInt;

public DirWatcher(MainFrame mf){
this.mf = mf;
newList = new Vector();
oldList = new Vector();
tempList = new Vector();
}

public void run(){
boolean isError = false;

getDirName();
getTimeInt();

mf.setTDirColor(new Color(0,0,255));
mf.DirWatcherOutput("Watch directory [" + dir + "] start.")
firstScan();

while(!isError){
scanDir();
readOldList();
if(compare()){
writeNewList();
}

oldList.removeAllElements();
newList.removeAllElements();

try{
Thread.sleep(timeInt * 1000);
}
catch(InterruptedException e){
String dMessage = "Directory scanning thread was interrupted." +
"\nDirectory Watcher stopped.";
int dType = JOptionPane.ERROR_MESSAGE;
String dTitle = "Scanning error:";
JOptionPane.showMessageDialog(null,dMessage,dTitle,dType);
isError = true;
}
}
}

void getDirName(){
File file = new File(System.getProperty("user.dir") + "\\","gftp.cfg");

if(file.exists()){
try{
FileInputStream fin = new FileInputStream(file);
BufferedReader freader = new BufferedReader(new InputStreamReader(fin));
freader.readLine();
freader.readLine();
String path = freader.readLine();
dir = path.substring(7);
}
catch(IOException e){
dir = "C:\\gridshare\\";
}
}
else{
dir = "C:\\gridshare\\";
}
}

void getTimeInt(){
File file = new File(System.getProperty("user.dir") + "\\","dirw.cfg");

if(file.exists()){
try{
FileInputStream fin = new FileInputStream(file);
BufferedReader freader = new BufferedReader(new InputStreamReader(fin));
String temp = freader.readLine();
String timeint = temp.substring(11);
timeInt = Integer.parseInt(timeint);
}
catch(IOException e){
timeInt = 30;
}
}
else{
timeInt = 30;
}
}

void totalScan(String dir,String ndir,Vector vlist,boolean flag){
File specDir = new File(dir);
String[] plist = specDir.list();
for(int i = 0; i < plist.length; i++){
String pname = dir + "\\" + plist[i];
String npname = ndir + "/" + plist[i];
File file = new File(pname);
if(file.isDirectory()){
totalScan(pname,npname,vlist,flag);
}
else{
vlist.addElement(npname);
if(flag){
mf.DirWatcherOutput("Performing entry addtion for file: " + npname + "......");
addToLdap newAdd = new addToLdap(npname);
String s = newAdd.add();
if(s.equals("none")){
mf.DirWatcherOutput("File entry for: " + npname + " added.");

}
else{
mf.DirWatcherOutput(s);

}
}
}
}
}

void firstScan(){
totalScan(dir,"",tempList,true);
}

void scanDir(){
totalScan(dir,"",newList,false);
}

void readOldList(){
for(int i = 0; i < tempList.size(); i++){
oldList.addElement(tempList.elementAt(i));
}
}

void writeNewList(){
tempList.removeAllElements();
for(int i = 0; i < newList.size(); i++){
tempList.addElement(newList.elementAt(i));
}
}

boolean compare(){
boolean flag = false;

for(int i = 0; i < newList.size(); i++){
if(oldList.indexOf(newList.elementAt(i)) == -1){
postAddition(newList.elementAt(i));
flag = true;
}
}

for(int i= 0; i < oldList.size(); i++){
if(newList.indexOf(oldList.elementAt(i)) == -1){
postDeletion(oldList.elementAt(i));
flag = true;
}
}

return flag;
}

void postAddition(Object str){
mf.DirWatcherOutput("Performing entry addtion for file: " + str.toString() + "......");
addToLdap newAdd = new addToLdap(str.toString());
String s = newAdd.add();
if(s.equals("none")){
mf.DirWatcherOutput("File entry for: " + str.toString() + " added.");

}
else{
mf.DirWatcherOutput(s);

}
}

void postDeletion(Object str){
mf.DirWatcherOutput("Performing entry deletion for file: " + str.toString() + "......");
deleteFromLdap newDelete = new deleteFromLdap(str.toString());
String s = newDelete.delete();
if(s.equals("none")){
mf.DirWatcherOutput("File entry for: " + str.toString() + " deleted.");

}
else{
mf.DirWatcherOutput(s);

}
}
}
newman0708 2003-07-08
  • 打赏
  • 举报
回复
用两vector保存文件目录结构(就是所有文件)

一个vector是现在的目录,另一个是1分钟前的目录。

两进行比较,就就可以知道变化的情况了。

挺感兴趣的,做好了能给我一份。
newman0708@yahoo.com.cn
unsalted 2003-07-08
  • 打赏
  • 举报
回复
隔1分钟列一下目录下的文件,看看有没有缺少或者新增。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧