Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Копирование файл в Java / 11 сообщений из 11, страница 1 из 1
28.11.2015, 16:50
    #39115378
shms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Здраствуйте!
Есть папка, один программа(A) сажает файлы этому папку, другой программа (B(desktop java app)) копирует от этого папки файлы. Такой вопрос может ли (B(desktop java app)) программа копирует файлы которые программа (A) не до конца сажал в папку
...
Рейтинг: 0 / 0
28.11.2015, 17:07
    #39115381
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Здравствуйте!
Теперь давайте тоже самое, только по-русски!
...
Рейтинг: 0 / 0
28.11.2015, 20:15
    #39115428
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Насколько я понял, вопрос в том, может ли десктопное приложение на Java копировать в третье место не до конца скопированные файлы из папки А в папку Б. Кратко: копировать файлы, которые еще не до конца скопированы из другого места.
...
Рейтинг: 0 / 0
28.11.2015, 22:38
    #39115489
just_vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Есть подозрение, что все зависит от того, как именно написаны эти приложения. Причем как то смутно припоминается, что в самой Java нет достоверного способа узнать занят ли файл другим процессом (хотя может что то есть в Java 7/8) и для этого нужно дергать внешние утилиты из ОС.
...
Рейтинг: 0 / 0
28.11.2015, 23:00
    #39115499
uid unique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Непонятно что нужно то - копировать незакончeнные файлы или нет? Подозреваю что копировать незаконченные не нужно.

Если копировать только законченные, можете использовать локи и java.nio.channels.FileChannel (классика, с 1.4) В 7-8 Java все упростилось (появился java.nio.file.Files).
Делая локи, учтите если папка расшаренная на NFS, то локи не работают во всех режимах (async/sync NFS).
Когда-то делал похожее приложение, с буфером данных в папке, использовал Apache VFS библиотеку, все работало нормально - детектирование новых файлов в папке и тд.
...
Рейтинг: 0 / 0
30.11.2015, 09:13
    #39116013
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Нужно делать что-то типа очереди сообщений. Первая программа скопировала файл - отметила о готовности, т.е. куда-то записала имя этого файла. Вторая программа периодически мониторит это (куда первая программа записала имя файла) на наличие нового файла, если появился - можно забрать новый файл, отметить что забрала.
...
Рейтинг: 0 / 0
30.11.2015, 10:48
    #39116102
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
GarrickНужно делать что-то типа очереди сообщений. Первая программа скопировала файл - отметила о готовности, т.е. куда-то записала имя этого файла. Вторая программа периодически мониторит это (куда первая программа записала имя файла) на наличие нового файла, если появился - можно забрать новый файл, отметить что забрала.

Зачем писать "куда-то" если можно по окончанию копирования создать рядом пустой файл *.ready? Простое и безотказное решение.
...
Рейтинг: 0 / 0
30.11.2015, 16:43
    #39116537
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
fixxerGarrickНужно делать что-то типа очереди сообщений. Первая программа скопировала файл - отметила о готовности, т.е. куда-то записала имя этого файла. Вторая программа периодически мониторит это (куда первая программа записала имя файла) на наличие нового файла, если появился - можно забрать новый файл, отметить что забрала.

Зачем писать "куда-то" если можно по окончанию копирования создать рядом пустой файл *.ready? Простое и безотказное решение.
Так это и есть один из вариантов "куда-то" :) Только в данном случае придётся постоянно "шерстить" весь каталог на наличие таких файлов. Короче, вариантов много, суть одна - нужен некий семафор/сигнал/признак и т.п. окончания копирования файла.
...
Рейтинг: 0 / 0
01.12.2015, 05:52
    #39116919
uid unique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
GarrickКороче, вариантов много, суть одна - нужен некий семафор/сигнал/признак и т.п. окончания копирования файла.

Вопрос на пару часов работы, велосипед незачем изобретать.

Есть пара готовых вариантов для мониторинга изменений содержимого папок - в Java 7 это WatchService: https://docs.oracle.com/javase/tutorial/essential/io/notification.html - готовое демо приложение от Оракла.

В Java 6 нормально работает Apache VFS - мониторинг подубовее, через сканированию по таймеру но код отлаженный.

Далее - после процессинга файлов их можно удалять из директории либо хранить имена processed файлов (хоть в processed.txt в той же папке или /var папке приложения или в базе - найдете), чтобы повторно не обратывать те же файлы после перезапуска приложения. Проверка дешевая, обычный Set с именами файлов (путями).

Пример с VFS:

Код: 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.
String inputFolderPath = "C:/input"; // входная папка
Set<String> processedFilePaths = new HashSet<String>();

FileSystemManager manager = VFS.getManager();

FileObject inputFolderObj = manager.resolveFile(inputFolderPath);

//обработчик изменений содержимого (новые файлы и удаленные
FolderListener folderChangeListener = new FolderChangesListener().initialize(inputFolderObj);

DefaultFileMonitor folderMonitor = new DefaultFileMonitor(folderChangeListener);
folderMonitor.setDelay(10000); // период проверки в мсек
folderMonitor.addFile(inputFolderObj);
folderMonitor.setRecursive(true); // подпапки мониторим?
folderMonitor.start();

//Далее, обработчик событий в папке:			
class FolderChangesListener implements FileListener {

	@Override
	public void fileChanged(FileChangeEvent paramFileChangeEvent)	throws Exception {
		
		//  почисти список processed.txt - processedFilePaths.remove() и тд
	}

	@Override
	public void fileCreated(FileChangeEvent paramFileChangeEvent) throws Exception {
		try {
			FileObject fileObj = paramFileChangeEvent.getFile();
				
			if(fileObj.getType() == FileType.FILE) {
	                // если файл подходит, обрабатываем и обновляем processed.txt
...
Рейтинг: 0 / 0
01.12.2015, 10:49
    #39117063
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
uid unique,
я почему не предлагаю конкретных вариантов - фиг его знает что там есть у @shms. Может уже JMS задействован или общая база данных для этих приложений есть, или ему по e-mail удобнее между приложения общаться :) и т.п. и т.д. Я же говорю "вариантов много" и мониторинг файловой системы один из возможных вариантов. Я ж не против... :-)
...
Рейтинг: 0 / 0
01.12.2015, 17:23
    #39117619
uid unique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование файл в Java
Garrickфиг его знает что там есть у @shms. Может уже JMS задействован или общая база данных для этих приложений есть, или ему по e-mail удобнее между приложения общаться :) и т.п. и т.д. Я же говорю "вариантов много" и мониторинг файловой системы один из возможных вариантов. Я ж не против... :-)
Опс, про email/JMS не подумал, мы обычно лудим-паяем, примусы починяем.
Но ведь во всяких MQSeries/OpenMQ/прочих JMS подобных с мониторингом то все в порядке, значит вопрос закрыт. VFS поодеживает практически все включая хадуп фс. Да и не спрашивают такие вопросы кто JMS использует.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Копирование файл в Java / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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