Путь к файлу в Eclipse (Java) - PullRequest
       3

Путь к файлу в Eclipse (Java)

1 голос
/ 25 октября 2010

Я использую Eclipse для создания динамического веб-проекта.Мое затмение находится в

/home/pc/eclipse

, а мой проект в /home/pc/workspace/MyWebProj

Теперь я поместил файлы в вышеуказанный каталог проектов.Когда я хочу прочитать любой файл из моего кода, он всегда ищет файлы в папке / home / pc / eclipse вместо /home/pc/workspace/MyWebProj, поэтому я жестко кодирую путь к файлу на данный момент.

Есть ли какие-либо настройки конфигурации в Eclipse, которые мне не хватает?

Пожалуйста, предложите.

Спасибо, Тара Сингх

Ответы [ 3 ]

1 голос
/ 25 октября 2010

Я думаю, что вам нужно прочитать файл из папки javax.servlet.ServletContext веб-приложения. Если вы используете getContextPath(), вы должны получить рабочий каталог веб-приложения, а не виртуальную машину Java.

Вы также можете попробовать загрузить любые файлы, используя методы getResource и getResourceAsStream из того же класса.

Я немного спешил, когда написал это, поэтому предоставлю немного больше информации.

Лучший подход - использовать метод getResourceAsStream. это позволяет вам получать доступ к файлам в вашем веб-приложении.

Чтобы получить файл foo.txt из корневого каталога веб-приложения и распечатать его в ответ, вы можете сделать следующее.

public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws javax.servlet.ServletException, java.io.IOException
    {
        PrintWriter writer = response.getWriter();

        // foo.txt is at the root directory of the web app
        InputStream in = getServletContext().getResourceAsStream("/foo.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        String text;
        while ((text = reader.readLine()) != null) {
            writer.println(text);
        }
    }    
}
0 голосов
/ 25 октября 2010

Не знаю, ищите ли вы это, но вы можете довольно легко установить / изменить «Рабочий каталог» каждой «Работающей конфигурации» в Eclipse.

  1. Перейти в диалоговое окно «Выполнить настройки»
  2. Выберите ваш проект (или конкретную рабочую конфигурацию)
  3. Выберите вкладку «Аргументы»
  4. В нижней части окна теперь вы можете изменить «Рабочий каталог» запущенной конфигурации.
  5. Измените его на / home / pc / workspace / MyWebProj , и ваше приложение должно работать.

Хотя это может сработать, я предлагаю вам пройти через переменную SystemProperty. Просто получите родительский путь к вашему файлу так:

File myFile = new File(System.getProperty("com.myapp.myfile.property"));

Теперь вы можете сбросить / переместить рабочий каталог и имя файла через Свойства системы, просто установив это ключевое слово.

Надеюсь, это немного поможет;)

0 голосов
/ 25 октября 2010

Я не уверен, что это за файлы, или, точнее, каково будет наиболее подходящее место хранения, но традиционно лучший способ ввода-вывода в этом случае - это ClassLoading .Вы можете создать исходную папку, расположенную в src/main/resources, которая будет включена в сборку архива (jar, war, ear и т. Д.) (Т.е. эти файлы будут включены в jar).Затем вы загрузите эти ресурсы .

. Если файл находится непосредственно в пакете, он также будет включен в сборку артефакта и доступен для любого класса в классе пакета.загрузчик или загрузчик классов по умолчанию с путем к пакету (пакеты соответствуют папкам при сборке архива).

Если вы используете подключаемый модуль сборки maven, эти файлы ресурсов будут включены автоматически.Если вы используете что-то вроде Ant, вам, вероятно, потребуется включить эти файлы в шаг скрипта.В противном случае, я думаю, что если вы просто создаете в Eclipse, есть мастер для включения файлов.

Кроме того, вероятной причиной попытки чтения файлов из папки / home / pc / eclipse является то, что система свойство как user.dir или user.home уточняется:

String filename = System.getProperty("user.dir") + System.getProperty("file.separator") + "file.txt";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...