Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отслеживание изменений нескольких файлов, Использовать потоки? 
:(
    Опции темы
rith2
Дата 10.12.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Привет.

Нужен совет опытных.

Задачка - отслеживание изменений файлов. Отслеживаю изменения с помощью openide.filesystems, если файл изменяется, то записываю в базу MySQL что такой то файл был изменен и имя пользователя изменившего файл. Для записи юзаю log4j.

Вопрос - если файлов будет много и нужно будет одновременно присматривать за ними, то listener запускать в потоке для каждого файла или есть иные способы решения? 

Спасибо.
PM MAIL   Вверх
LSD
Дата 12.12.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



А как там вообще реализуется отслеживание изменений?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
rith2
Дата 13.12.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Код

package japp;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.openide.filesystems.*;
import org.apache.log4j.*;
import java.util.Properties;
import java.util.TimerTask;
import java.util.Timer;


public class FWatchClass {
    private static final Logger log = Logger.getLogger(FWatchClass.class);
    private static final FWatchClass FMonitor = new FWatchClass(); 
    static final String LogFile = "OneMoreConf.properties.txt";
    private Timer timer;
    private Map timerEntries;
    private static final FWatchClass instance = new FWatchClass();
    
    public static void main(String[] args) {
        //log.info("Calling class constructor");
        new FWatchClass();
    }
    
    //Инициалиация Логгера
    private void initLogger() {
        log.debug(true);
        System.out.println("Initialising prop file");
        Properties logProp = new Properties();
        try {
            logProp.load(new FileInputStream(LogFile));
            //log.info("Config file is loaded");
            PropertyConfigurator.configure(logProp);
            //log.info("Logging initialized");
        } catch(IOException e) {
            throw new RuntimeException("Unable 2load logging property" + LogFile);
        }
    }
    
    //Конструктор
    public FWatchClass() {
        this.timerEntries = new HashMap();
        this.timer = new Timer(true);
        initLogger();
        FileChangeListener lst = null;
        System.out.println("Calling adFileChangeListener");
        addFileChangeListener(lst, "H:/Programs/DU Meter", 2000);
    } 
    
    //return instance
    public static FWatchClass getInstance() {
        return instance;
    }
    
    //Добавляем файл в Listener
    public void addFileChangeListener(FileChangeListener FListener, String FileName, long period) {
        this.RemoveFileChangeListener(FileName);
        System.out.println("File "+FileName+" listened");
        FileMonitorTask FTask = new FileMonitorTask(FListener, FileName);
        this.timerEntries.put(FileName, FTask);
        this.timer.schedule(FTask, period, period); 
    }
    
    //Удаляем файл из Listener
    private void RemoveFileChangeListener(String FileName) {
        
    }
    
    //Класс
    private class FileMonitorTask extends TimerTask {
        private FileChangeListener FListener;
        private String FileName;
        private File monitorFile;
        private long lastModified;

        @Override
        public void run() {
            
            long lastChange = this.monitorFile.lastModified();
            //log.info("lastMod " + this.monitorFile.lastModified());
            if (this.lastModified!=lastChange) {
                this.lastModified = lastChange;
                String str = "CHECK";
                 MDC.put("NDC_", str);
                FileEvent fe = null;
                log.info(FileName + " was changed"); //имя пользователя
                //log.info("File was changed by " + java.lang.System.getProperty("user.name"));
                //this.FListener.fileChanged(fe);
                
                //log.info("Proc finished");
            }
        }
        
        //Конструктор
        public FileMonitorTask(FileChangeListener FListener, String FileName) {
            this.FListener = FListener;
            this.FileName = FileName;
            this.monitorFile = new File(FileName);
            
            if (!this.monitorFile.exists()) {
                return;
            }
            
            this.lastModified = this.monitorFile.lastModified();
        }
    }
    
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.