| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Проблема с file.exists() в сервлете |
| Автор: alexey123456 1.12.2010, 14:58 | ||
| Добрый день. Работает сервлет, создает временную директорию с именем, завязанным от сессии, например: "run1a7d94e128f0333b0af335a99210-1291204215593". Далее внутри этой директории появляется файл, после чего код ниже выдает рез-т false, т.е. файл не найден:
tempDir точно равен текущей созданной директории. Если вывести строчку "C:\\Environment\\" + tempDir.trim() + "\\source.exe" на экран и вставить в проводник, файл успешно откроется (в данном случае source.exe ). Почему же files.exists() выдает false, не ясно.. |
| Автор: dobrolub 1.12.2010, 18:58 |
| Может файл появляется чуть позже чем исполняется этот код или файловая система, по каким-то причинам, не даёт процессу увидеть этот файл. Выведи все файлы в директории с помощью file.list() и проверь какие файлы есть в дире на момент отработки этого кода. Также проверь атрибуты директории и source.exe |
| Автор: alexey123456 1.12.2010, 20:09 | ||
Да, именно так судя по всему и происходит. Файл уже создан, far например или обычный проводник его видит, а программа - нет! Если выдать все содержимое созданного каталога, то source.exe там не будет, но будут старые файлы, созданные ранее вместе с каталогом. Притом, если позже вручную попробовать проверить на существование данный файл, вернется true... Не понятно, как исправить эту ситуацию... Добавлено @ 20:12 Кстати, может быть проблема в сервере GlassFish. Он запускается автоматически из NetBeans, и для того, чтобы внести изменения, надо выполнить redemploy'ing всего проекта. Хотя врятли - директории создаются вне проекта, в отдельной папке в корне C. |
| Автор: dobrolub 1.12.2010, 20:21 |
| Вероятно надо пересмотреть логику работы программы с учётом того, как этот файл появляется в той директории. Ещё один вопрос, нужно ли этот файл класть в директорию для каждого юзера? Если юзеров много, то есть вероятность забить диск и существенно снизить быстродействие программы - файловые операции одни из самых медленных. |
| Автор: alexey123456 1.12.2010, 20:31 | ||
Там не совсем директории для юзверей. Это что-то вроде одной тестирующей единицы - создается временная директория по jsession и времени, в нее кладется файл-исходник. Затем из исходника собирается программа в exe или class файл (для явы). И вот затем как раз проверяется наличие собранной программы (exe или class файл). |
| Автор: dobrolub 1.12.2010, 20:55 | ||
Это происходит в том-же потоке или в другом? Если в том-же, и с помощью java.lang.Process, то надо ждать пока Process завершиться с помощью waitFor() |
| Автор: alexey123456 2.12.2010, 13:18 | ||||||
Помогло использование
Большое спасибо. |