Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с file.exists() в сервлете, Проблема с file.exists() в сервлете 
:(
    Опции темы
alexey123456
Дата 1.12.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Добрый день.
Работает сервлет, создает временную директорию с именем, завязанным от сессии, например:
"run1a7d94e128f0333b0af335a99210-1291204215593".

Далее внутри этой директории появляется файл, после чего код ниже выдает рез-т false, т.е. файл не найден:

Код

File file = new File("C:\\Environment\\" + tempDir.trim() + "\\source.exe");
out.print( file.exists() );


tempDir точно равен текущей созданной директории. Если вывести строчку "C:\\Environment\\" + tempDir.trim() + "\\source.exe" на экран и вставить в проводник, файл успешно откроется (в данном случае source.exe ). Почему же files.exists() выдает false, не ясно..
PM MAIL   Вверх
dobrolub
Дата 1.12.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



Может файл появляется чуть позже чем исполняется этот код или файловая система, по каким-то причинам, не даёт процессу увидеть этот файл.

Выведи все файлы в директории с помощью file.list() и проверь какие файлы есть в дире на момент отработки этого кода. Также проверь атрибуты директории и source.exe 

Это сообщение отредактировал(а) dobrolub - 1.12.2010, 20:07
PM   Вверх
alexey123456
Дата 1.12.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Цитата(dobrolub @ 1.12.2010,  18:58)
Может файл появляется, чуть позже чем исполняется этот код, или файловая система по каким-то причинам не даёт процессу увидеть этот файл.

Выведи все файлы в директории с помощью file.list() , и проверь  какие файлы есть в дире на момент отработки этого кода. Также проверь атрибуты директории и source.exe

Да, именно так судя по всему и происходит.
Файл уже создан, far например или обычный проводник его видит, а программа - нет!
Если выдать все содержимое созданного каталога, то source.exe там не будет, но будут старые файлы, созданные ранее вместе с каталогом.

Притом, если позже вручную попробовать проверить на существование данный файл, вернется true...
Не понятно, как исправить эту ситуацию...

Добавлено @ 20:12
Кстати, может быть проблема в сервере GlassFish.
Он запускается автоматически из NetBeans, и для того, чтобы внести изменения, надо выполнить redemploy'ing всего проекта.
Хотя врятли - директории создаются вне проекта, в отдельной папке в корне C.

Это сообщение отредактировал(а) alexey123456 - 1.12.2010, 20:14
PM MAIL   Вверх
dobrolub
Дата 1.12.2010, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



Вероятно надо пересмотреть логику работы программы с учётом того, как этот файл появляется в той директории. Ещё один вопрос, нужно ли этот файл класть в директорию для каждого юзера? Если юзеров много, то есть вероятность забить диск и существенно снизить быстродействие программы - файловые операции одни из самых медленных.
PM   Вверх
alexey123456
Дата 1.12.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Цитата(dobrolub @ 1.12.2010,  20:21)
Вероятно надо пересмотреть логику работы программы с учётом того, как этот файл появляется в той директории. Ещё один вопрос, нужно ли этот файл класть в директорию для каждого юзера? Если юзеров много, то есть вероятность забить диск и существенно снизить быстродействие программы - файловые операции одни из самых медленных.

Там не совсем директории для юзверей.

Это что-то вроде одной тестирующей единицы - создается временная директория по jsession и времени, в нее кладется файл-исходник.

Затем из исходника собирается программа в exe или class файл (для явы).

И вот затем как раз проверяется наличие собранной программы (exe или class файл).
PM MAIL   Вверх
dobrolub
Дата 1.12.2010, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



Цитата(alexey123456 @ 1.12.2010,  20:31)
Это что-то вроде одной тестирующей единицы - создается временная директория по jsession и времени, в нее кладется файл-исходник.

Это происходит в том-же потоке или в другом? Если в том-же, и с помощью java.lang.Process, то надо ждать пока Process завершиться с помощью waitFor()
PM   Вверх
alexey123456
Дата 2.12.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Цитата(dobrolub @ 1.12.2010,  20:55)
Цитата(alexey123456 @ 1.12.2010,  20:31)
Это что-то вроде одной тестирующей единицы - создается временная директория по jsession и времени, в нее кладется файл-исходник.

Это происходит в том-же потоке или в другом? Если в том-же, и с помощью java.lang.Process, то надо ждать пока Process завершиться с помощью waitFor()

Помогло использование 
Код

process.waitFor();

Большое спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.