2013-03-12 5 views
1

Я пытаюсь сделать апплет, который читает файл в локальной файловой системе (компьютер пользователя) с очень частым интервалом (несколько раз в секунду), а затем делает содержимое файла доступным для веб-страницы через javascript ,Проверьте, открыт ли файл перед его чтением?

Файл, который необходимо прочитать, обновляется с высокой частотой с помощью программы на компьютере пользователя. Меня беспокоит то, что может произойти, если апплет читает данные из файла, когда файл находится в середине обновления.

Я не знаю, насколько это возможно, но если это актуальная проблема, есть ли способ убедиться, что файл в настоящее время не написан до его чтения?

+0

то, что я чувствую, что до тех пор, пока вы не сохраните файл на диске будет иметь более старую копию и его будет читать этот старый файл. – kaysush

+0

@SuKu - На компьютере пользователя запущена программа, которая перезаписывает содержимое файла на высокой частоте. Это мое беспокойство. Мне интересно, может ли апплет читать файл, когда он находится в середине перезаписи. – Nate

+0

вы можете прочитать файл при условии, что вы не получите исключение, что файл уже используется, и у вас нет проблем, если для некоторых чтения вы получаете более старое содержимое. – kaysush

ответ

2

Я не уверен по этому поводу, но вы можете попробовать java.io.FileInputStream, или какой-то другой вариант из этого пакета.

Кроме того, этот вопрос может быть дубликатом. Это может ответить на ваш вопрос:

  1. How do I use Java to read from a file that is actively being written?
  2. reading a file while it's being written
  3. Read a file while it's being written
  4. Reading data from a File while it is being written to
1

его самого монстра, чтобы сделать такой доступ к диску, любым способом попробуйте Сокеты, если вы можете или если вы снова сидите обратно, попробуйте заблокировать файл на обоих концах, если один из блокировок не работает, тогда убедитесь, что другой заблокирован, сделайте до этого к использованию

File file = new File(fileName); 
FileChannel channel = new RandomAccessFile(file, "rw").getChannel(); 
// Get an exclusive lock on the whole file 
FileLock lock = channel.lock(); 
try { 
    lock = channel.tryLock(); 
    // Ok. You get the lock 
} catch (OverlappingFileLockException e) { 
    // File is open by other end 
} finally { 
    lock.release(); 
} 
Смежные вопросы