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

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

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

Зачем писать "куда-то" если можно по окончанию копирования создать рядом пустой файл *.ready? Простое и безотказное решение.
Так это и есть один из вариантов "куда-то" :) Только в данном случае придётся постоянно "шерстить" весь каталог на наличие таких файлов. Короче, вариантов много, суть одна - нужен некий семафор/сигнал/признак и т.п. окончания копирования файла.
...
Рейтинг: 0 / 0
Копирование файл в Java
    #39116919
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Копирование файл в Java
    #39117063
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uid unique,
я почему не предлагаю конкретных вариантов - фиг его знает что там есть у @shms. Может уже JMS задействован или общая база данных для этих приложений есть, или ему по e-mail удобнее между приложения общаться :) и т.п. и т.д. Я же говорю "вариантов много" и мониторинг файловой системы один из возможных вариантов. Я ж не против... :-)
...
Рейтинг: 0 / 0
Копирование файл в Java
    #39117619
uid unique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickфиг его знает что там есть у @shms. Может уже JMS задействован или общая база данных для этих приложений есть, или ему по e-mail удобнее между приложения общаться :) и т.п. и т.д. Я же говорю "вариантов много" и мониторинг файловой системы один из возможных вариантов. Я ж не против... :-)
Опс, про email/JMS не подумал, мы обычно лудим-паяем, примусы починяем.
Но ведь во всяких MQSeries/OpenMQ/прочих JMS подобных с мониторингом то все в порядке, значит вопрос закрыт. VFS поодеживает практически все включая хадуп фс. Да и не спрашивают такие вопросы кто JMS использует.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Копирование файл в Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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