Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Обнаружение файлов / 25 сообщений из 25, страница 1 из 1
19.12.2012, 13:58:20
    #38085064
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
как поймать появление файла?
ось Debian.
...
Рейтинг: 0 / 0
19.12.2012, 14:01:48
    #38085075
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадякак поймать появление файла?
ось Debian.
Java 7
http://docs.oracle.com/javase/tutorial/essential/io/notification.html
...
Рейтинг: 0 / 0
19.12.2012, 15:17:58
    #38085258
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
Blazkowicz,
ты с этим работал?
там ловятся 2 события создание и модификация, если файл длинный - несколько событий модификации. как определить кокое последнее?
...
Рейтинг: 0 / 0
19.12.2012, 15:24:58
    #38085276
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадятам ловятся 2 события создание и модификация, если файл длинный - несколько событий модификации. как определить кокое последнее?
Никак. Нужно логику менять. Можно таймаут ввести. Но это будет частичным решением. Нельзя достоверно сказать по какой причине не приехал следующий кусок большого файла. То ли запись закончена, то ли запись задержалась по какой-то причине.
Объясни супер-задачу.
...
Рейтинг: 0 / 0
19.12.2012, 15:53:27
    #38085331
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
суперзадача простая, в папку сыпятся файлы, интервал случайный, размер случайный.
по окончанию записи файла его надо обработать.
городить таймер в "крутом" модуле это как-то не спортивно.
можно проверять что-то, обозначающее окончание записи, но я не нашел что это может быть...
новедь должно. длина или ?
...
Рейтинг: 0 / 0
19.12.2012, 15:56:34
    #38085338
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадясуперзадача простая, в папку сыпятся файлы, интервал случайный, размер случайный.
по окончанию записи файла его надо обработать.
городить таймер в "крутом" модуле это как-то не спортивно.
можно проверять что-то, обозначающее окончание записи, но я не нашел что это может быть...
новедь должно. длина или ?
Можно попробовать проверять блокировку на запись: File.canWrite();
...
Рейтинг: 0 / 0
19.12.2012, 16:21:37
    #38085377
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
если я правильно сделал
Код: java
1.
2.
3.
System.out.format("%s: %s  ", event.kind().name(), child);
File file = new File(child.toString());
System.out.println(file.canWrite());



всегда выводит true

ENTRY_CREATE: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true
...
Рейтинг: 0 / 0
19.12.2012, 16:22:44
    #38085379
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
...
Рейтинг: 0 / 0
19.12.2012, 16:23:34
    #38085383
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадя, ты всё равно на ходу реагировать не успеешь. Складывай изменения в лог
а потом в конце дня проанализировал и сделал там бэкап или еще чего хотел.

Вообще, если хранилище небольшое то и rsync или svn клиент справляюстя
с этим не хуже.
...
Рейтинг: 0 / 0
19.12.2012, 16:24:01
    #38085385
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадяxxx.mkv
Порнуху торентом качаем?
...
Рейтинг: 0 / 0
19.12.2012, 16:36:53
    #38085413
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
maytonвадя, ты всё равно на ходу реагировать не успеешь. Складывай изменения в лог
а потом в конце дня проанализировал и сделал там бэкап или еще чего хотел.

Вообще, если хранилище небольшое то и rsync или svn клиент справляюстя
с этим не хуже.

мне в базу нада вносить, желательно по мере поступления, чтоб клиент видел
ну не верю, что б такое сделали и нельзя узнать окончания!!!

если б порнуху, ххх это что б знать что можно смело удалять..
...
Рейтинг: 0 / 0
19.12.2012, 16:41:17
    #38085429
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадя, от тебя нужна статистика. Каков размер (прибл) хранилища которое ты мониторишь.
Как часто создаются файлы? (Сколько штук в минуту или секунду)
Каков средний размер файла? Максимальный размер?
Что это за формат? Xml, текстовый или произвольный бинарный?
...
Рейтинг: 0 / 0
19.12.2012, 16:53:07
    #38085455
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
текстовые
размер, время, частота - неизвестны, т.е. любые. размер примерно <10м
размер папки - примонтированны раздел - папка из компа с окнами..
...
Рейтинг: 0 / 0
19.12.2012, 16:53:15
    #38085456
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадячто б такое сделали и нельзя узнать окончания!
Абстрагируйтесь от уровня Java и подумайте о том как реализована ОС.
Вот есть какой-то процесс. Он пишет в файл. Причем частями. Как операционке узнать что "процесс закончил писать файл".
Да вообще никак. Либо с контрольной суммой сравнивать. Которую непонятно как передать.
Либо лок на запись смотреть, с которым тоже не всё так просто. Процесс может его забрать и не отдавать больше.
...
Рейтинг: 0 / 0
19.12.2012, 18:18:53
    #38085636
goalinternet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадяесли я правильно сделал
Код: java
1.
2.
3.
System.out.format("%s: %s  ", event.kind().name(), child);
File file = new File(child.toString());
System.out.println(file.canWrite());



всегда выводит true

ENTRY_CREATE: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true
ENTRY_MODIFY: D:\xxx\xxx.mkv true

а если попробовать файл переименовать? если позволило значит файл отпущен процессом который его создал. неа?
...
Рейтинг: 0 / 0
19.12.2012, 19:26:54
    #38085744
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
goalinternetа если попробовать файл переименовать? если позволило значит файл отпущен процессом который его создал. неа?Если вы никогда не видели юниксов, то это не должно мешать хотя бы читать о них.
...
Рейтинг: 0 / 0
19.12.2012, 19:55:22
    #38085790
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
Blazkowiczвадячто б такое сделали и нельзя узнать окончания!
Абстрагируйтесь от уровня Java и подумайте о том как реализована ОС.
Вот есть какой-то процесс. Он пишет в файл. Причем частями. Как операционке узнать что "процесс закончил писать файл".
Да вообще никак. Либо с контрольной суммой сравнивать. Которую непонятно как передать.
Либо лок на запись смотреть, с которым тоже не всё так просто. Процесс может его забрать и не отдавать больше.
Если это XML-документ то можно как-то валидировать. Если это текст и имеет какой-то footer
то можно проверять эту строчку в конце.

Вообще архитектура плохая. Имемм Виндовс-файловый сервер в котором неизвестное явление или процесс
клепает файлы. Это всё отдается Дебиану по неизвестному протоколу (CIFS)? и требуется чтоб дебиан писал
в бд с задержкой(!) хрен его знает с какой но быстро изменения в текстовых плоских файлах.

Верно?
...
Рейтинг: 0 / 0
19.12.2012, 20:37:50
    #38085821
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
ваши слова - да богу в уши......
если б это от меня зависелоо.........
просто чел хочет по-легкому отойти, остальные хоть голыми на мороз...
по умному так сразу в базу можно писать....
вот и приходися извращЁвываться.

авторЕсли это текст и имеет какой-то footer
то можно проверять эту строчку в конце.

мысль не оптимальная, но в прицЫпе ...
заставить писать что-то в конце еще можно.
вопрос как это поймать быстро и лаконично?
есть красивые решения?
хоть в чем-то красоту поиметь...
...
Рейтинг: 0 / 0
19.12.2012, 20:43:05
    #38085827
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
Я вообще не уверн что в такой связке CIFS будет вовремя отдавать евенты
по своему протоколу. Я уверен что этот пример WatchDir.java будет генерировать
разное число событий будучи запущенным

1) На Windows-станции (локальное хранилище)
2) На Debian-станции (локальное хранилище)
3) На Debian-станции (через CIFS)
...
Рейтинг: 0 / 0
19.12.2012, 22:38:29
    #38085917
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
делал под виндой как приложение , запускал в netbeans, работало
сча перене на сервер сделал класс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
import static java.nio.file.LinkOption.*;
import java.nio.file.attribute.*;
import java.io.*;
import java.util.*;

public class WatchFile {

    private final WatchService watcher;
    private final Map<WatchKey, Path> keys;
    private final boolean recursive;
    private boolean trace = false;

    @SuppressWarnings("unchecked")
    static <T> WatchEvent<T> cast(WatchEvent<?> event) {
        return (WatchEvent<T>) event;
    }

    private void register(Path dir) throws IOException {
        WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
        if (trace) {
            Path prev = keys.get(key);
            if (prev == null) {
                System.out.format("register: %s\n", dir);
            } else {
                if (!dir.equals(prev)) {
                    System.out.format("update: %s -> %s\n", prev, dir);
                }
            }
        }
        keys.put(key, dir);
    }

    private void registerAll(final Path start) throws IOException {
        // register directory and sub-directories
        Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                    throws IOException {
                register(dir);
                return FileVisitResult.CONTINUE;
            }
        });
    }


    WatchFile(Path dir, boolean recursive) throws IOException {
        this.watcher = FileSystems.getDefault().newWatchService();
        this.keys = new HashMap<WatchKey, Path>();
        this.recursive = recursive;

        if (recursive) {
            System.out.format("Scanning %s ...\n", dir);
            registerAll(dir);
            System.out.println("Done.");
        } else {
            register(dir);
        }

        this.trace = true;
    }

    void processEvents() {
        for (;;) {
            WatchKey key;
            try {
                key = watcher.take();
            } catch (InterruptedException x) {
                return;
            }
            Path dir = keys.get(key);
            if (dir == null) {
                System.err.println("WatchKey not recognized!!");
                continue;
            }
            for (WatchEvent<?> event : key.pollEvents()) {
                WatchEvent.Kind kind = event.kind();

                if (kind == OVERFLOW) {
                    continue;
                }
                WatchEvent<Path> ev = cast(event);
                Path name = ev.context();
                Path child = dir.resolve(name);
                System.out.format("%s: %s\n", event.kind().name(), child);
                if (recursive && (kind == ENTRY_CREATE)) {
                    try {
                        if (Files.isDirectory(child, NOFOLLOW_LINKS)) {
                            registerAll(child);
                        }
                    } catch (IOException x) {
                    }
                }
            }
            boolean valid = key.reset();
            if (!valid) {
                keys.remove(key);
                if (keys.isEmpty()) {
                    break;
                }
            }
        }
    }
}




сделал
для запуска

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    public static void wf(){
          Path dir = Paths.get("/mnt/share/");
        try {
            new WatchFile (dir,false).processEvents();
        } catch (IOException ex) {
            
        }
    }



ну и нужном месте запускаю
вроде запускается конструктор отрабатывает. и все на этом часть сервлетов работает, а част не хочет и вывод на консоль блокирован
я где-то сглупил, ткните
...
Рейтинг: 0 / 0
19.12.2012, 23:29:03
    #38085969
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
точнее родную папку мониторит, примонтированную из окон не хочет. и почему-то
погас листенер (в нем потоки используются) прослушивающий порт.
...
Рейтинг: 0 / 0
20.12.2012, 16:34:26
    #38087096
goalinternet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
Basil A. Sidorovgoalinternetа если попробовать файл переименовать? если позволило значит файл отпущен процессом который его создал. неа?Если вы никогда не видели юниксов, то это не должно мешать хотя бы читать о них.

Не к вам было обращение.
Что мне читать я сам решу.
Свои знания юниксов покажите девочкам в ПТУ.
...
Рейтинг: 0 / 0
20.12.2012, 16:39:21
    #38087113
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадяточнее родную папку мониторит, примонтированную из окон не хочет.
Не удивительно. Такие толстые нюансы стоило сразу указать.

вадяи почему-то погас листенер (в нем потоки используются) прослушивающий порт.
О чем речь? А почему должен был гореть?
...
Рейтинг: 0 / 0
21.12.2012, 09:15:29
    #38087741
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
вадямне в базу нада вносить, желательно по мере поступления, чтоб клиент видел
ну не верю, что б такое сделали и нельзя узнать окончания!!!
- как только файл становится доступным на запись (тонкость в том что надо проверять не методом File.canWrite(), а пытаясь открыть поток на дозапись) он закончил копироваться. Проверять состояние доступности на дозапись в цикле с интервалом.

P.S. собственно я так делал, работает в Linux/Windows
...
Рейтинг: 0 / 0
22.12.2012, 01:59:44
    #38088931
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обнаружение файлов
насколько я понимаю, операция закрытия файла должна ловиться через NIO селектором как SelectionKey.OP_READ, при этом вычитается -1.

я так думаю потому, что тут ru.wikipedia.org/wiki/Epoll написано, что еполлу не важно с чем он рабтает - с сокетом или с файлом.

То есть получается, что можно ловить появившиеся файлы, селектором вешать на них событие SelectionKey.OP_READ, по мере появлния данных вычитывать их, и когда прочтем -1, то это есть конец файла.

по-хорошему вычитанные данные можно сразу обрабатывать, но на скору руку можно тупо читать и ждать -1, а когда прийдет - генерить евент и обрабатывать весь файл.

Загуглите примеры исползования классов из java.nio: Selector, SelectionKey, SocketChannel, ServerChannel, FileChannel. Я не пробовал, но по идее логика работы SocketChannel и FileChannel должна совпадать, соответственно серверные примеры с минимальными переделками можно переделать на одновременное чтение кучи файлов.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Обнаружение файлов / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]