Вы можете использовать это так:
find . -name 'config.xml' -exec bash -c \
'd="$HOME/data/${1%/*}/"; mkdir -p "$d"; command cp -p "$1" "$d"' - {} \;
Единственный реальный способ иметь дело с этим состоит в том, чтобы иметь браузер, постоянно говорят Вам, что это все еще там, говорите каждые 5-10 секунд. Если Вы идете в течение минуты, ничего не слыша, Вы предполагаете, что клиент ушел, и забудьте то, что Вы делаете.
Существует несколько способов реализовать это:
Нет никакого реального способа, которым можно обнаружить, если клиент все еще читает то, что Вы отправляете. Это занимает время, чтобы соединения TCP умерли, и путь к клиенту является часто непрямым так или иначе (через прокси и т.д), так забудьте об обнаружении этого.
Сервлет имеет буфер вывода, который должен заполниться, прежде чем данные на самом деле отправляются в браузер. Если этот буфер не был заполнен, никакие данные на самом деле не отправляются в сети. Пока Вы не отправляете данные по сети, Вы, привычка знает, что соединение закрывается.
Можно установить размер буфера путем вызова метода на объекте ответа прежде, чем получить поток вывода или устройство записи.
Вы пытаетесь сделать что-то, что не поддерживается протоколом HTTP. Целая природа сети основана на запросе/ответе.
Один способ моделировать, в чем Вы нуждаетесь, состоит в том, чтобы использовать Ajax. Поток был бы чем-то вроде этого:
Эта архитектура избавит от необходимости проверять на "доступность" клиента и также улучшит масштабируемость Ваших серверных компонентов.
Я надеюсь, что это помогает.
java.io.PrintWriter javadoc sez: Методы этого класса никогда не генерируют исключения ввода-вывода - поэтому используйте вместо него javax.servlet.SocketOutputStream (response.getOutputStream ()), и вы получите некоторое исключение IOException со временем.