Читать файл с Java, пока он сохраняется вручную - PullRequest
2 голосов
/ 16 марта 2011

У меня есть вопрос по поводу ввода / вывода Java и файлов.для конкретной задачи я должен передать файл (Excel, если быть точным), пока он открыт.представьте себе следующий сценарий:

Файл Excel открывается и используется одним пользователем.Время от времени файл сохраняется вручную пользователем.Теперь я хочу написать Java-программу, которая читает файл и передает его через сокет каждые 30 секунд.Пока проблем нет.Мой вопрос: что произойдет, если пользователь сохранит документ в тот момент, когда моя программа захочет прочитать файл.Может ли это вызвать какие-либо проблемы?

Не знаю, имеет ли это значение, но я использую BufferedInputStream для чтения файла.

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Мой вопрос: что произойдет, если пользователь сохранит документ именно в тот момент, когда моя программа захочет прочитать файл.Может ли это вызвать какие-либо проблемы?

Да.

В зависимости от вашей платформы и способа сохранения файла Excel может произойти одно или несколько из следующих действий.

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

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

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

  • Может работать.

Корочепрограмма, выполняющая чтение, должна быть очень оборонительной ...


Не знаю, имеет ли это значение, но я использую BufferedInputStream для чтения файла.

Это не имеет значения, я думаю.

1 голос
/ 16 марта 2011

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

1 голос
/ 16 марта 2011

AFaik, поведение будет зависеть от вашей базовой файловой системы / операционной системы.Система Unix обычно сохраняет «безымянную» копию читаемого файла и начинает создавать новый файл для «записываемой» новой копии, используя хитрость inode.Старая система Windows, скорее всего, ответит, что файл не может быть записан, потому что он заблокирован.Я не знаю о современных системах Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...