2013-05-29 2 views
0

У меня есть требование, когда я пишу файл на сервер. Другое приложение имеет запланированное задание, которое считывает файл с определенным интервалом. Файл не должен быть доступен для чтения, пока моя запись не будет завершена. Я пробовал использоватьЗапретить читать доступ к файлу до завершения записи - java

File.isReadable(false) 

Но это не работает. И планировщик собирает неполные данные из файла, если я все еще пишу вам.

Любые решения?

+0

Как насчет [получения блокировки файла] (http://stackoverflow.com/questions/128038/how-can-i-lock-a-file-using-java-if-possible)? –

ответ

2

Вы можете использовать другой файл с тем же именем, что и маркер. Вы начнете писать в FileName.txt, а когда закончите, создайте файл FileName.rdy
И ваше приложение будет проверять только файлы * .rdy, если они найдены - прочитайте FileName.txt.

1

Вы можете использовать API FileLock.

Я кратко объяснил, как это работает here.

4

Запись на другое имя файла, а затем, когда запись завершена, переименуйте файл в имя, которое ожидает планировщик. Если вы работаете в Linux или аналогично, то переименования файлов в одной файловой системе являются атомарными.

File tempFile = new File("/path/to/file.tmp"); 
// write to tempFile 
tempFile.renameTo(new File("/path/to/file")); 
+0

Если вы используете Java 7, лучше используйте новый API 'Files'. – Djon

+0

@Ian Мое приложение работает на окнах. Приложение, просматривающее файл, находится в Solaris. И файловый сервер - это Linux. Значение файла и приложений на разных физических машинах – sadhu

+0

@sadhu, возможно, стоит попробовать, или если у вас есть контроль над приложением, читающим файл, тогда [ответ JIV] (http://stackoverflow.com/a/16813659/592139), вероятно, лучший способ. –

0

лучший вариант будет синхронизировать чтения и записи процедур ...

поместить свой код, чтобы прочитать файл и записать файл в synchornized {} блоков .... такие, что можно подождать до другого завершения

+0

Чтение происходит в «другом приложении», и вы не можете использовать 'synchronized' для разных процессов. –

Смежные вопросы