Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > проблемы с wtp eclipse


Автор: Amaz0nka 5.12.2007, 20:55
Есть простой сервлет, которым я пытаюсь открыть текстовый файл, вынуть от туда текст и отобразить его. Проблема в том, что этот wtp eclipse почему то ищет этот файл не в каталоге проекта, а в папке, где лежит сам eclipse.exe (от куда я запускаю эклипсу).

Код

StringBuffer buf = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("doc.txt")));
while (in.ready()){
    buf.append(in.readLine()+"\n");
} 
String text = buf.toString();
 
выдаёт FileNotFountException? если же этот файл поместить в папку с еклипсой - то всё прекрасно работает. Но не будешь же туда всё постоянно класть.
Неужели ничего нельзя сделать?

Автор: powerOn 5.12.2007, 21:09
Найдите в Run/Debug Settings параметр Working Directory и поменяйте на какой нужно. 

Автор: Amaz0nka 5.12.2007, 22:17
В том то и дело, что там нету не одной конфигурации... менять негде... а создать новую можно либо для апплета либо для аппликэйшена, для сервлета нельзя (((

Автор: Kangaroo 5.12.2007, 22:23
Amaz0nka, 
а как вы сервлет запускаете? Он же не сам, а в каком-нибудь приложении?

Автор: Amaz0nka 5.12.2007, 22:24
Run on Server выбираешь и всё запускается

Автор: Kangaroo 5.12.2007, 23:02
Попробуйте:
Код

BufferedReader in = new BufferedReader(new InputStreamReader(this.getServletContext().getResourceAsStream("doc.txt")));

А doc.txt положите в WebContent - корень вашего веб-проекта.

Автор: Amaz0nka 6.12.2007, 15:38
не помогает  smile 

Автор: Kangaroo 6.12.2007, 16:39
Цитата(Amaz0nka @  6.12.2007,  14:38 Найти цитируемый пост)
не помогает 

Должно работать.. я у себе проверял. Попробуйте положить doc.txt по разным папкам проекта ) наугад.

Автор: AlexeyVorotnikov 6.12.2007, 17:29
Цитата(Kangaroo @ 6.12.2007,  16:39)
Цитата(Amaz0nka @  6.12.2007,  14:38 Найти цитируемый пост)
не помогает 

Должно работать.. я у себе проверял. Попробуйте положить doc.txt по разным папкам проекта ) наугад.

А также в C:\WINDOWS\system32. Вдруг поможет.  smile 

Автор: Tony 6.12.2007, 18:20
Цитата(AlexeyVorotnikov @ 6.12.2007,  17:29)
Цитата(Kangaroo @ 6.12.2007,  16:39)
Цитата(Amaz0nka @  6.12.2007,  14:38 Найти цитируемый пост)
не помогает 

Должно работать.. я у себе проверял. Попробуйте положить doc.txt по разным папкам проекта ) наугад.

А также в C:\WINDOWS\system32. Вдруг поможет.  smile

 smile  smile  smile   Отжог. +1

Автор: Kangaroo 6.12.2007, 18:40
Цитата(AlexeyVorotnikov @  6.12.2007,  16:29 Найти цитируемый пост)
А также в C:\WINDOWS\system32. Вдруг поможет.  

Может у человека хоть как-то заработает  smile 

Автор: ivg 6.12.2007, 18:41
Цитата(AlexeyVorotnikov @  6.12.2007,  17:29 Найти цитируемый пост)
Цитата(Kangaroo @ 6.12.2007,  16:39)
Цитата(Amaz0nka @  6.12.2007,  14:38 Найти цитируемый пост)
не помогает 

Должно работать.. я у себе проверял. Попробуйте положить doc.txt по разным папкам проекта ) наугад.

А также в C:\WINDOWS\system32. Вдруг поможет.  smile 


[off]
А я бы вот -1 поставил. За стёб. На это ума много не надо. А вот ты попробуй помочь человеку, который сам не понимает, что делает.
ИМХО короче.
[/off]

Автор: COVD 6.12.2007, 18:55
А это такой раздел специфический, что похоже никто не понимает, что делает. Если методом проб и ошибок получается, то мгновенно и забывается. Поэтому никто и не может дать четкий ответ.

Цитата

если же этот файл поместить в папку с еклипсой - то всё прекрасно работает. Но не будешь же туда всё постоянно класть.


Более того, не будешь же ставить по окончанию работы на сервер весь эклипс. Результатом является war. И там опять эта проблема может всплыть.

Автор: Kangaroo 6.12.2007, 19:08
Цитата(COVD @  6.12.2007,  17:55 Найти цитируемый пост)
Более того, не будешь же ставить по окончанию работы на сервер весь эклипс. Результатом является war. И там опять эта проблема может всплыть.

Да я вроде и предложил универсальное решение.. а почему оно не заработало...  smile 

Автор: Kangaroo 6.12.2007, 19:35
Вот из Servlet Specification:
Цитата

The ServletContext interface provides direct access only to the hierarchy of static
content documents that are part of the Web application, including HTML, GIF, and
JPEG files, via the following methods of the ServletContext interface:
• getResource
• getResourceAsStream
The getResource and getResourceAsStream methods take a String with a
leading “/” as an argument that gives the path of the resource relative to the root of
the context
. This hierarchy of documents may exist in the server’s file system, in a
Web application archive file, on a remote server, or at some other location.

Amaz0nka, попробуйте еще так:
Код

BufferedReader in = new BufferedReader(new InputStreamReader(this.getServletContext().getResourceAsStream("/doc.txt")));

Положив doc.txt в WebContent


Автор: COVD 6.12.2007, 19:36
Цитата

Да я вроде и предложил универсальное решение.. а почему оно не заработало...  

Выходит, не универсальное. Я в свое время долго мучился с проблемой читать проперти файлы, пытался понять обьяснения про лоадеры. Естественно, уже благополучно забыл эту тарабарщину. Ключевым, как я понимаю, является использование метода getResourceAsStream("имя файла") и тогда вся головная боль переносится на систему. Поскольку программа, читающая файл, может лежать в отдельной библиотеке, то  этот метод следует вызывать на обьекте, класс которого загружен основным приложением. Примерно так: 

Код

InputStream in = obj.getClass().getResourceAsStream("/"+FILE_NAME+".properties");


И файлы просто кладутся в корень папки проекта source , где java код лежит.  Что-то вроде этого.

PS У меня так и не сложилось ощущение, что я понял, что делал smile

Автор: Kangaroo 6.12.2007, 19:59
Цитата(COVD @  6.12.2007,  18:36 Найти цитируемый пост)
У меня так и не сложилось ощущение, что я понял, что делал

Ну почему? Тут вроде все понятно ) 
Из папки source файл копируется в WEB-INF/classes. А там его уже находит класс лоадер и читает с помощью getResourceAsStream.
Поправьте, если я не прав..

Автор: COVD 6.12.2007, 20:39
Все правильно - когда работает, то все понятно. Непонятно было, когда не находил и тоже пихал файлы во все возможные папки. А причина - недостаточное знание концепции лоадеров. Я про то, что возможно это не оптимальное решение, а из серии "Работает? Не трогай!".   smile 

Автор: ivg 6.12.2007, 21:49
Погорячился. Предущий свой пост предлагаю считать недействительным, ибо сами не без греха. Что ж попробую тоже помочь.
Amaz0nka, у меня вариант приведённый Kangaroo, работает как надо. Это значит, что мы с вами что то по разному делаем.
Цитата(Amaz0nka @  6.12.2007,  15:38 Найти цитируемый пост)
не помогает  smile  

Почему так решили? В браузере не выводится содержимое файла? А файл не пустой?
В коде вашего сервлета есть что то похожее на:
Код

response.getWriter().write(text);

? Файл находится в папке WebContent проекта?
Опишите подробнее что делаете? и приведите код сервлета. Может тогда что то прояснится.

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