Вы забыли flush()
или, что лучше, close()
поток впоследствии (который уже выполняет неявный сброс). Очистка необходима, потому что данные могут быть внутренне буферизированы до определенной длины, и очистка заставляет весь буфер быть фактически записанным в вывод.
Итак, измени
output.writeBytes(query);
до
output.writeBytes(query);
output.close();
На самом деле нормальная идиома - закрывать потоки в блоке finally
блока try
по мере их получения, чтобы вы могли гарантировать, что они закрываются всякий раз, когда во время записи происходит IOException
. Закрытие важно, потому что оно освобождает системные ресурсы.
Stream stream = null; // Can be InputStream, OutputStream, Reader or Writer.
try {
stream = new SomeStream();
// ...
} finally {
if (stream != null) try { stream.close(); } catch (IOException logOrIgnore) {} // You can if necessary bake an utility method taking Closeable or take a look for commons IO.
}
Также см. Учебник Sun Java IO для получения дополнительных базовых уроков и рекомендаций.