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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Средство для обеспечения повторов 
:(
    Опции темы
sol78
Дата 28.8.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот такая история - мне нужно что то для обеспечения проверки содержимого текучещей папки, т.е. не изменилось ли оно, через некоторое количество времени. Где то слышала что в джаве есть инструменты для этого, помогите найти и научите ими пользоваться?!
Заранее благодарна!
PM MAIL   Вверх
nornad
Дата 28.8.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Цитата(sol78 @  28.8.2007,  21:38 Найти цитируемый пост)
Средство для обеспечения повторов

Повторов чего?

Цитата(sol78 @  28.8.2007,  21:38 Найти цитируемый пост)
Вот такая история - мне нужно что то для обеспечения проверки содержимого текучещей папки, т.е. не изменилось ли оно, через некоторое количество времени

Что здесь понимается под содержимым? Список файлов в папке? Некоторый файл в папке, содержащий какую-то информацию, которая может быть кем-то изменена?


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
sol78
Дата 28.8.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я пишу HotFolder  рабочей единицей тут является файл содержащейся в папке.
Дело в том что можно добовлять файлы runtime .Как мне отследить изменения, появился ли новый файл?
PM MAIL   Вверх
_Michael
  Дата 28.8.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

        File f = new File("C:/Windows/Fonts");
        String[] files = null;
        if(f.isDirectory()) {
            files = f.list();
            for(int i = 0; i<files.length; i++) {
                System.out.println(files[i]);
            }
        }
        List<String> fileList = Arrays.asList(files);
        Set oldFilesSet = new HashSet<String>();
        oldFilesSet.addAll(fileList);
        
//        Че то делаем или за нас делается

        files = f.list();
        fileList = Arrays.asList(files);
        Set newFilesSet = new HashSet<String>();
        newFilesSet.addAll(fileList);
        if(oldFilesSet.containsAll(newFilesSet) && 
                newFilesSet.containsAll(oldFilesSet))
        System.out.println("No changes");
        else
            System.out.println("There were changes in directory "+f.getAbsolutePath());
        
 Думаю ты етого хотела smile 

Это сообщение отредактировал(а) _Michael - 28.8.2007, 21:59


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
_Michael
Дата 28.8.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sol78, ну че там? если что непонятно то говори smile


--------------------
...не убивайся ни о чем - все временно,
хоть ночь темна но светлым днем беременна...

Саади
PM MAIL   Вверх
sol78
Дата 17.11.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да что то тут много не понятно....
PM MAIL   Вверх
Kangaroo
Дата 17.11.2007, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



Цитата(sol78 @  17.11.2007,  00:28 Найти цитируемый пост)
да что то тут много не понятно.... 

так не понятно, что 3 месяца разбирался?  smile 
напиши хоть, что не получается, попробуем помочь.


--------------------
Lost....
PM MAIL MSN   Вверх
sol78
Дата 25.11.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



дело в том что задача не была четко поставлена так...

Как бы это профессиональнее реализовать?
-Есть система, которая должна с каким то периодом времени проверять состояние физ. папки 
  если состояние изменилось - обработать только новое.
 
Тут возникает проблема -нужно как то помнить прежние состояния папки, что бы избежать повторов?
Как определить, что состояние изменилось?

И  что есть в джабе для этого?    
PM MAIL   Вверх
LSD
Дата 25.11.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 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   Вверх
sol78
Дата 26.11.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Использование  Swing Timera:
как я поняла созадан  для swing/awt  компоненов, т.к использует механизм с листенерами
и для выполнения длительных задач все еще нужен отдельний сред...Но в принципе идея не плохая!

Может кто реально реализовывал выше изложенную задачу, помогите плизз?
   
PM MAIL   Вверх
LSD
Дата 28.11.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код

  private String path = ".\\res";
  private Timer timer = new Timer(1000, this);
  private Map<File, Long> files = new java.util.HashMap<File, Long>();

  public void start()
  {
    File file = new File(path);
    for(File f : file.listFiles())
    {
      files.put(f, f.lastModified());
    }
    timer.start();
  }

  public void actionPerformed(ActionEvent e)
  {
    File file = new File(path);
    File[] files = file.listFiles();
    if(files.length != this.files.size())
    {
      System.out.println("Files was added or removed");
    }
    else
    {
      for(File f : files)
      {
        Long l = this.files.get(f);
        if(l == null || l != f.lastModified())
        {
          System.out.println("File " + f + " changed");
        }
      }
    }
  }



--------------------
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   Вверх
sol78
Дата 19.12.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Voznikla problema s rabotoy Timera
...Nuzhno dozhdat'sya rezultata raboti threda,
Код


import javax.swing.Timer;
import java.awt.event.*;
import ManageMonitor.*;

public class FolderAnalizator implements ActionListener, Runnable,ResultListener {
    private Task task;
    private Folder curFolder;
    private Timer timer;
    private CQueue queue;


    public FolderAnalizator(Folder folder) {
        curFolder = folder;
        queue = CQueue.getTaskQueue();
        task = new Task(folder);
        task.addMyEventListener(this);
        timer = new Timer((int) folder.getTestingTime(), this);
        
        new Thread(this).start();

    }

    public void actionPerformed(ActionEvent e) {

        if (!curFolder.getStateAction()) {
            timer.setRepeats(false);}
       else...
       // dolzhen vipolnyatsya , proizoydet event ProcessingResult(ResultEvent e) ;
    }

    public void run() {
        timer.setInitialDelay(0);
        timer.setLogTimers(true);
        timer.start();

    }
    public void ProcessingResult(ResultEvent e) {
               queue.putTask(task);
     
    }

Kak pri obrabotke odnogo eventa, dozhdat'sya drugogo, prichem vsya rabota idet v threde???

PM MAIL   Вверх
LSD
Дата 20.12.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



1. Не пиши транслитом, очень тяжело читать. Если нет русской клавиатуры используй чекбокс трансдит.

2. Объясни задачу почетче, из твоего кода ничего непонятно.
Например зачем этот код
Код

timer.setInitialDelay(0);
timer.setLogTimers(true);
timer.start();

выносить в отдельный поток? Он же выполняется очень быстро.


--------------------
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   Вверх
sol78
Дата 20.12.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile translit ne rabotaet.....
PM MAIL   Вверх
sol78
Дата 20.12.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Postorayusь obьyasnitь v chem problema:
est' nekiy main-thread(GUI), cherez nego zapuskaet Analizator, kotoriy rabotaet kak timer...
....Analizator delaet svoyu rabotu, gotovit Task i kladet ego v ConcurrentQueue . Dalee rabotaet ThreadPoolExecutor,
    zabiraet iz Q taski i vipolnyaya ix. Posle vipolneniya taska, resultat "vibrasivaetsya" kak event, Analizator slushaet eti sobitiya i reagiruet.
    I tak po krugu. 

....User sam mozhet zapustit' analizator i ostanovit' ego esli nuzhno

Tut voznikaet neskol'ko problem:
1.Kogda user zapuskat Analizator (new Analizator  ->run thread)
   ostanavlivaet ego (timer.setRepeats(false);)
   i snova zapuskaet Analizator (resultatom etogo imeem uzhe 2 threada)
kak bit'?
2 Kak vse eto delo krasivo ostanovit' (exit from app), pri uslovii chto nuzhno dozhdat'sya vipolneniya vsex zapuschenix iz  ThreadPoolExecutor???
Prilagayu ves' kod:
Analizator
Код

package MultyTh;

import javax.swing.Timer;
import java.awt.event.*;
import ManageMonitor.*;

public class FolderAnalizator implements ActionListener, Runnable,ResultListener {
    private Task task;
    private Folder curFolder;
    private Timer timer;
    private CQueue queue;


    public FolderAnalizator(Folder folder) {
        curFolder = folder;
        queue = CQueue.getTaskQueue();
        task = new Task(folder);
        Task.addMyEventListener(this);
        timer = new Timer((int) folder.getTestingTime(), this);
        System.out.println(folder.getTestingTime());// for debug
        new Thread(this).start();

    }

    public void actionPerformed(ActionEvent e) {
       
        
        if (!curFolder.getStateAction()) {
            timer.setRepeats(false);
        } 
     
            timer.stop();
            queue.putTask(task);
             
       
    }

    public void run() {
        timer.setInitialDelay(0);
        timer.start();

    }
    public void ProcessingResult(ResultEvent e) {
       
        if (e.getSource().equals(curFolder)) {
             System.out.println("Result Event"+ ((Folder)e.getSource()).getPath());
            if (e.getStateResult().getLastActionResult()) {
                timer.restart();
            } else
                timer.setRepeats(false);
        }
    }   

}


Queue
Код

package MultyTh;

import java.util.concurrent.*;

public class CQueue implements Runnable{
    private static final int MAX_QUEUE_SIZE = 10;
    private static CQueue queue = null;
    private BlockingQueue<Runnable> tasksQueue;
    private ThreadPoolExecutor threadPool;
    private CQueue() {
        tasksQueue = new ArrayBlockingQueue<Runnable>(MAX_QUEUE_SIZE);
        threadPool = new ThreadPoolExecutor(10, 20, 10, TimeUnit.SECONDS,
                                            new LinkedBlockingQueue<Runnable>());
       new Thread(this).start();

    }

    public static CQueue getTaskQueue() {
        if (queue == null) {
            queue = new CQueue();
        }
        return queue;
    }

    public void putTask(Runnable Task) {
        try {
            tasksQueue.put(Task);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    public void start() {
        try {
            Runnable t = tasksQueue.take();
            if (t != null) {
                System.out.println("Task exec");
                threadPool.execute(t);
            }
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }

    }

    public void run() {
       
        while(true){
            start();
        }
    }
}


Task
Код

package MultyTh;

import ManageMonitor.*;
import java.io.*;
import Plugins.*;
import javax.swing.event.EventListenerList;

public class Task implements Runnable {
    private static EventListenerList listenerList = new EventListenerList();
    private Folder srcFolder;

    public Task(Folder folder){
       srcFolder=folder;
    }
    public void run() {
        StateResult res;
        System.out.println("Task is working");
        res=srcFolder.getAction().myAction(srcFolder);
        fireMyEvent(new ResultEvent(srcFolder, res));
        
    }
    
    public static void addMyEventListener(ResultListener listener) {
           listenerList.add(ResultListener.class, listener);
       }

      
     public static void removeMyEventListener(ResultListener listener) {
           listenerList.remove(ResultListener.class, listener);
       }

      public static void fireMyEvent(ResultEvent evt) {
           Object[] listeners = listenerList.getListenerList();
               for (int i=0; i<listeners.length; i+=2) {
               if (listeners[i]==ResultListener.class) {
                   ((ResultListener)listeners[i+1]).ProcessingResult(evt);
               }
           }
       }

}


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.1011 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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