用两vector保存文件目录结构(就是所有文件)一个vector是现在的目录,另一个是1分钟前的目录。两进行比较,就就可以知道变化的情况了。挺感兴趣的,做好了能给我一份。
[email protected]

解决方案 »

  1.   

    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);

    }     
    }
    }