powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Запись файла - определить окончание записи
37 сообщений из 37, показаны все 2 страниц
Запись файла - определить окончание записи
    #38892221
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сохраняю так
Код: java
1.
2.
3.
fileOut = new FileOutputStream("C:/workbook.xlsx");
wb.write(fileOut);
fileOut.close();


файл небольшой.
вопрос как определить что файл готов для считвания после сохранения?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892301
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
на сервере?
После Close всех дескрипторов и ресурсов.
Вы же без потоков.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892321
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
на сервере.
авторПосле Close всех дескрипторов и ресурсов.
дак вот как поймать этот момент?
после формирования файла на клиент передаётся команда. по этой команде клиент таким методом
Код: javascript
1.
document.getElementById('download').click();


Код: html
1.
<a href="files/workbook.xlsx" download id="download" ></a>


загружает файл,
но это происходит быстро. и браузер пишет, что файла нет...
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892331
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wb (из первого поста)
Workbook wb = new SXSSFWorkbook();
в идеале было б wb не записывать в файл, а преобразовать в byteArray, но как то не получается у меня.
подскажите как это можно сделать?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892347
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпосле формирования файла на клиент передаётся команда. по этой команде клиент таким методом
выложи время в отладке:
1. fileOut.close();
2. <a href="files/workbook.xlsx" download id="download" ></a>
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892351
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а также поставь задержку, чтобы убедиться что код правильный и позже он его качает.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892362
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, если убрать автоматизацию т.е.
клиент отправляет команду на сервер, сервер генерит файл,
сохраняет его, а клиент вручную тыкнет на
Код: html
1.
<a href="files/workbook.xlsx" download id="download" >скачать</a>


файл скачивается
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892391
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
автоматизацию)) пишешь ты сам.
Проверяй время, потоки, синхроинзируй и блокируй.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892451
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дак я и спрашиваю, что проверить, чтоб знать что файл сохранён
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892461
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадядак я и спрашиваю, что проверить, чтоб знать что файл сохранён
Ну так после закрытия файлового потока он будет сохранен (если по исключению не отвалишься). Или кури try с ресурсами. Что не так?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892481
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУвадядак я и спрашиваю, что проверить, чтоб знать что файл сохранён
Ну так после закрытия файлового потока он будет сохранен (если по исключению не отвалишься). Или кури try с ресурсами. Что не так?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 FileOutputStream fileOut;
            try {

                fileOut = new FileOutputStream("C:/workbook.xlsx");
                wb.write(fileOut);
        
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println("File created!");


сообщение появляется, исключений нет
что ещё покурить?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892485
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, xlsx - это одна из разновидностей .zip архива. Если он прочитался до конца успешно - значит файл согласован.
Пока существует временный файл ~$filename.xlsx - значит кто-то редактирует документ.

Вот в таком вот аспекте.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892495
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто ещё покурить?
выше писал - хотя бы время в логах
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892513
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадячто ещё покурить?

Код: java
1.
2.
3.
try(OutputStream out = new BufferedOutputStream(new FileOutputStream(filename))){
   out.write(data); 
}
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892523
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonвадя, xlsx - это одна из разновидностей .zip архива. Если он прочитался до конца успешно - значит файл согласован.
Пока существует временный файл ~$filename.xlsx - значит кто-то редактирует документ.

Вот в таком вот аспекте.
файл не существует, он создается в коде и когда он создан он ещё в памяти - это объект wb.
приведённый выше код - это место когда объект пишется на диск.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892550
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczвадячто ещё покурить?

Код: java
1.
2.
3.
try(OutputStream out = new BufferedOutputStream(new FileOutputStream(filename))){
   out.write(data); 
}


data == wb ?
я создаю файл с помощью apache POI
Workbook wb = new SXSSFWorkbook();
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892570
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892576
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадячто ещё покурить?
выше писал - хотя бы время в логах

время от подачи команды на клиенте до команды
document.getElementById('download').click();
587.000ms
клик по кнопке на клиенте - получение команды на сервере- создание , запись файла - ответ клиенту - document.getElementById('download').click(); = 587.000ms
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892581
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickвадя,

См. Create an excel file for users to download using Apache POI
спасибо ! буду проверять. вроде то, что надо
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892624
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявремя от подачи команды
я просил примерно так:
- fileOut.close(); // 12:01:234
- запрос файла // 12:00:234
т.е. запрос на сек. раньше создания
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892671
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадявремя от подачи команды
я просил примерно так:
- fileOut.close(); // 12:01:234
- запрос файла // 12:00:234
т.е. запрос на сек. раньше создания
такое трудно сделать
fileOut.close() на сервере,
запрос файла , кторый приходит с клиета можно отловить только на самом клиенте
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892676
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

ну почемуже. Настройте чтобы логи сервера сыпались в один файл.

XX:YY.SSSS записали файл
XX:YY.SSSS отправили информацию клиенту
XX:YY.SSSS пришел запрос от клиента.

Или у Вас статику отдает другой сервер?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892686
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязапрос файла , кторый приходит с клиета можно отловить только на самом клиенте
это же JS, твой конёк и хлеб. Неужели не интересно разобраться?
На админку вместо админа больше времени потратил.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892701
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня работа идет через websocket
команда с клиента на сервер через websocket, парсинк команды, выполнение : создание файла - ответ сервера через websocket
на клиенте парсинг ответа и и запрос через <a href="files/workbook.xlsx" download id="download" ></a>
но это не правильный вариант работы
1 лишние дисковые операции т.к. файл временный
2 необходимость отслеживания имен файлов, их удаления
поэтому вариант 17332700 самый оптимальный, на него и расчитывал
с файлами связался потому, как надо было проверить остальную логику работы, ну и на первых порах надеялся прокатит.
в данном случае уперлось в быстродействие файловой системы.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892706
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадязапрос файла , кторый приходит с клиета можно отловить только на самом клиенте
это же JS, твой конёк и хлеб. Неужели не интересно разобраться?
На админку вместо админа больше времени потратил.
интересно, только "На админку вместо админа больше времени потратил." :)
и с файлами ( в данном случае - отстойный вариант) не хочется время тратить ...
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892733
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Вопрос же не в файлах. А в том когда Вы дергаете callback на клиенте.
Если до того, как fileOut.close(); закончился, то Вы ССЗБ.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892746
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньеввадя,

Вопрос же не в файлах. А в том когда Вы дергаете callback на клиенте.
Если до того, как fileOut.close(); закончился, то Вы ССЗБ.
вот более полный код
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 FileOutputStream fileOut;
            try {

                fileOut = new FileOutputStream("C:/workbook.xlsx");
                wb.write(fileOut);
                fileOut.close();
                fileOut.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println("File created!");
            webSocket_.send("xxx");вот тут идет сообщение клиенту о готовности сохранения файла, в ответ на это 

клиент делает
document.getElementById('download').click();
<a href="files/workbook.xlsx" download id="download" ></a>
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892769
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньеввадя,

Вопрос же не в файлах. А в том когда Вы дергаете callback на клиенте.
Если до того, как fileOut.close(); закончился, то Вы ССЗБ.

в общем я и начинал с того
авторвопрос как определить что файл готов для считвания после сохранения?
иными словами : как определить что fileOut.close(); закончился?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892946
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickвадя,

См. Create an excel file for users to download using Apache POI

ещё раз большое спасибо за ссылку !!!
работает великолепно (с небольшими переделками под конкретную реализацию)
на сервер идет запрос, с сервера файл в формате base64 (с необходимыми причиндалами в начале )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
            ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
            wb.write(outByteStream);
            byte[] outArray = outByteStream.toByteArray();

            StringBuilder sb = new StringBuilder();
            sb.append("data:application/bin;base64,");
            sb.append(StringUtils.newStringUtf8(Base64.encodeBase64(outArray, false)));

            webSocket_.send(sb.toString());



на клиенте он принимается и строка подставляется в

Код: javascript
1.
2.
 $('#download').attr('href', p);
 document.getElementById('download').click();


Код: javascript
1.
<a href="" download="xxx.xlsx" id="download" ></a>


при необходимости можно и имя файла менять :)
проверено в хроме, монобраузерность? меня устраивает... :)
ЗЫ
если к серверу подключены 2 клиента (или более) можно с одного клиента (главного) дать команду на сохранение другому клиенту (подчинённому) ему, конечно, придется выбрать путь для сохранения.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38892952
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто-нибудь знает как в apache poi задать ширину колонки в экселе?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38909237
usa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл пишется в C:/workbook.xlsx, а http запрос ссылается на files/workbook.xlsx
Как по мне не в ту директорию пишите.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38909346
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
генерация файла происходить во время тыкания по ссылке.
после этого открываешь его и отдаешь клиенту с нужными http-заголовками.
т.е. после close() делай read() и отдавай его в выходной поток. ну тогда смысл тут в промежуточном файле? может сразу все байты отдавать в выходной поток?

глупость генерировать файл до кликания по ссылке.
а если клиент его не захочет качать?
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38909367
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня в 17334746 так и реализовано.
работает великолепно
единственный недостаток - хром не запрашивает о действии, если файл существует, а по умолчанию переименовывает (добавляет в конце в скобках цифры)
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38910818
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

открой для себя HTTP заголовки, отправь верный - и хром перестанет переименовывать файлы
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38911142
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD_2вадя,

открой для себя HTTP заголовки, отправь верный - и хром перестанет переименовывать файлы
подскажи как и где надо отправлять?
-у меня данные файла передаются с помощью websocket.
-нашел ответ на форуме по хрому - это фича хрома, говорять исправить нельзя.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38928958
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

стандартно, когда веб-сервер отдает файл, должен быть такой заголовок:
авторContent-Disposition: attachment; filename="your_filename.txt"

в случае Веб-сокетов - не могу сказать.
...
Рейтинг: 0 / 0
Запись файла - определить окончание записи
    #38929182
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD_2вадя,

стандартно, когда веб-сервер отдает файл, должен быть такой заголовок:
авторContent-Disposition: attachment; filename="your_filename.txt"

в случае Веб-сокетов - не могу сказать.
тут дело не в заголовке,
а в тои что, хром при каждом сохранении с filename="your_filename.txt" не спрашивает, что делать если имена файлов совпадают, а автоматом добавляет к имени (NN) номер версии..
фишка хрома.
оно, конечно, не плохая, когда можно ей управлять.
но при разработке копится куча ненужных файлов, нужных лишь для проверки самого факта возможности скачать файл с сервера...
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Запись файла - определить окончание записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]