powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Обнаружение файлов
25 сообщений из 25, страница 1 из 1
Обнаружение файлов
    #38085064
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как поймать появление файла?
ось Debian.
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085075
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадякак поймать появление файла?
ось Debian.
Java 7
http://docs.oracle.com/javase/tutorial/essential/io/notification.html
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085258
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
ты с этим работал?
там ловятся 2 события создание и модификация, если файл длинный - несколько событий модификации. как определить кокое последнее?
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085276
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятам ловятся 2 события создание и модификация, если файл длинный - несколько событий модификации. как определить кокое последнее?
Никак. Нужно логику менять. Можно таймаут ввести. Но это будет частичным решением. Нельзя достоверно сказать по какой причине не приехал следующий кусок большого файла. То ли запись закончена, то ли запись задержалась по какой-то причине.
Объясни супер-задачу.
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085331
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
суперзадача простая, в папку сыпятся файлы, интервал случайный, размер случайный.
по окончанию записи файла его надо обработать.
городить таймер в "крутом" модуле это как-то не спортивно.
можно проверять что-то, обозначающее окончание записи, но я не нашел что это может быть...
новедь должно. длина или ?
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085338
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадясуперзадача простая, в папку сыпятся файлы, интервал случайный, размер случайный.
по окончанию записи файла его надо обработать.
городить таймер в "крутом" модуле это как-то не спортивно.
можно проверять что-то, обозначающее окончание записи, но я не нашел что это может быть...
новедь должно. длина или ?
Можно попробовать проверять блокировку на запись: File.canWrite();
...
Рейтинг: 0 / 0
Обнаружение файлов
    #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
Обнаружение файлов
    #38085379
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085383
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, ты всё равно на ходу реагировать не успеешь. Складывай изменения в лог
а потом в конце дня проанализировал и сделал там бэкап или еще чего хотел.

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

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

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

если б порнуху, ххх это что б знать что можно смело удалять..
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085429
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, от тебя нужна статистика. Каков размер (прибл) хранилища которое ты мониторишь.
Как часто создаются файлы? (Сколько штук в минуту или секунду)
Каков средний размер файла? Максимальный размер?
Что это за формат? Xml, текстовый или произвольный бинарный?
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085455
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текстовые
размер, время, частота - неизвестны, т.е. любые. размер примерно <10м
размер папки - примонтированны раздел - папка из компа с окнами..
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085456
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто б такое сделали и нельзя узнать окончания!
Абстрагируйтесь от уровня Java и подумайте о том как реализована ОС.
Вот есть какой-то процесс. Он пишет в файл. Причем частями. Как операционке узнать что "процесс закончил писать файл".
Да вообще никак. Либо с контрольной суммой сравнивать. Которую непонятно как передать.
Либо лок на запись смотреть, с которым тоже не всё так просто. Процесс может его забрать и не отдавать больше.
...
Рейтинг: 0 / 0
Обнаружение файлов
    #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
Обнаружение файлов
    #38085744
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goalinternetа если попробовать файл переименовать? если позволило значит файл отпущен процессом который его создал. неа?Если вы никогда не видели юниксов, то это не должно мешать хотя бы читать о них.
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38085790
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадячто б такое сделали и нельзя узнать окончания!
Абстрагируйтесь от уровня Java и подумайте о том как реализована ОС.
Вот есть какой-то процесс. Он пишет в файл. Причем частями. Как операционке узнать что "процесс закончил писать файл".
Да вообще никак. Либо с контрольной суммой сравнивать. Которую непонятно как передать.
Либо лок на запись смотреть, с которым тоже не всё так просто. Процесс может его забрать и не отдавать больше.
Если это XML-документ то можно как-то валидировать. Если это текст и имеет какой-то footer
то можно проверять эту строчку в конце.

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

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

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

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

1) На Windows-станции (локальное хранилище)
2) На Debian-станции (локальное хранилище)
3) На Debian-станции (через CIFS)
...
Рейтинг: 0 / 0
Обнаружение файлов
    #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
Обнаружение файлов
    #38085969
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее родную папку мониторит, примонтированную из окон не хочет. и почему-то
погас листенер (в нем потоки используются) прослушивающий порт.
...
Рейтинг: 0 / 0
Обнаружение файлов
    #38087096
goalinternet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorovgoalinternetа если попробовать файл переименовать? если позволило значит файл отпущен процессом который его создал. неа?Если вы никогда не видели юниксов, то это не должно мешать хотя бы читать о них.

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

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

P.S. собственно я так делал, работает в Linux/Windows
...
Рейтинг: 0 / 0
Обнаружение файлов
    #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
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Обнаружение файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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