Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Запись/чтение в файл на примапленном диске


Автор: Devorior 19.1.2009, 10:53
Если тема уже была, то пардон, у меня сейчас почему-то не работает поиск  smile 

Командой subst сделал диск (например z:), который ссылается на директорию на той же машине.
Джава говорит что не находит путь когда я пытаюсь сделать запись в файл по примапленному пути (z:/filename.txt) и кидает java.io.FileNotFoundException. Важно: код выполняется из-под сервлета, в обычном прикладном приложении все работает без ошибок

Как правильно записать данные в файл на примапленном диске? Подскажите может быть какие-нибудь API для реализации.

Спасибо заранее

Автор: ivg 19.1.2009, 11:53
У меня работает.
Покажите код.
Версия JVM?

Автор: Devorior 19.1.2009, 12:14
Пишу как в обычный файл

Код

log.debug("Write to mapped disk ... ");
File tfile = new File("z:/fname.txt");
log.debug("File exists: " + tfile.exists());
FileOutputStream fos = new FileOutputStream("z:/fname.txt");
fos.write("test string".getBytes());
fos.close();
log.debug("Write to mapped disk ... OK");


Результат:
Код

19/01/2009 12:08:50 - DEBUG - Write to mapped disk ... 
19/01/2009 12:08:50 - DEBUG - File exists: false
19/01/2009 12:08:50 - ERROR - Error while running ZIPPacker with user_id=ss1f059 : java.io.FileNotFoundException: z:\fname.txt

Автор: ivg 19.1.2009, 13:00
Интересно причём тут ZIPPacker. Код рабочий. Давайте полный стэктрэйс. Если в коде указать полный путь к этой папке, без виртуального диска, работает?

Автор: Devorior 19.1.2009, 14:52
Некорректно написал постановку проблемы =\
Под прикладным приложением все хорошо работает, не работает если код выполняется из-под сервлета (сервер Tomcat 6.0).
Видимо веб-сервер не понимает маппированные диски

Автор: ivg 19.1.2009, 16:07
Неее..., ерунда. Скорее всего проблема с security. Полный стек-трэйс?

Автор: Devorior 19.1.2009, 16:34
Код

java.io.FileNotFoundException: z:\fname.txt (Системе не удается найти указанный путь)
java.io.FileOutputStream.open(Native Method)
java.io.FileOutputStream.<init>(Unknown Source)
java.io.FileOutputStream.<init>(Unknown Source)
dm.servlets.MappedServletTest.doGet(MappedServletTest.java:23)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


Пробовал также запускать службу Томката от имени учетной записи того пользователя, с которого маппировал диск (пользователь с админ правами)

Добавлено через 8 минут и 35 секунд
Да, проблема именно в сервисе Томката. Если запускаю Томкат консолью, все работает правильно. Из-под сервиса не хочет работать даже если запускать из-под учетки пользователя с админ. правами

Автор: ivg 19.1.2009, 17:33
subst делает маппинг только для сеанса текущего пользователя. Если в этом же сеансе запустить сервер то
Цитата(Devorior @  19.1.2009,  18:34 Найти цитируемый пост)
все работает правильно

По видимому при старте windows-сервиса для него создается новый сеанс, в котором никакого маппинга не существует, даже если с той же учётной записью. Стартуйте Tomcat командным файлом, ну и в нём же можно сделать маппинг виртуального диска.

Автор: LSD 20.1.2009, 12:49
Посмотри что выдаст такая строчка:
Код

System.out.println(Arrays.toString(File.listRoots()));

Автор: Devorior 20.1.2009, 15:39
Из-под сервлета:
[A:\, C:\, D:\, E:\, F:\, G:\, H:\]
Из-под консольного приложения:
[A:\, C:\, D:\, E:\, F:\, G:\, H:\, W:\, Z:\]

w: и z: - виртуальные диски

Автор: LSD 21.1.2009, 00:11
Вывод один - диски не замаплены. Почему и как, вопрос отдельный и к Java не относится. Создай новую тему в разделе Windows.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)