FileInputStream не работает в веб-приложении

Мы пытаемся прочитать файл свойств в сервлете, используя fileInputStream.

Однако мы постоянно получаем исключение «Файл не найден».

Это фрагмент кода, который мы используем

Properties properties = new Properties();
          File propertyFile = new File("config" + File.separatorChar + "abc.properties");
          try {
          FileInputStream propertyFileStream = new FileInputStream(propertyFile);
                properties.load(propertyFileStream);
                propertyFileStream.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

При использовании getResourceAsStream он работает нормально.

Однако нам нужно понять, почему FileInputStream не работает.

Мы поместили файл config\abc.properties в файл webInf. Мы также пытались поместить его в папку src (путь к классу java), папку webContent, папку WebInf\Classes, но безуспешно.


person user123    schedule 13.05.2016    source источник
comment
не работает? вы не можете получить значения свойств?   -  person KhAn SaAb    schedule 13.05.2016
comment
Это дает FileNotFoundException   -  person user123    schedule 13.05.2016
comment
и я вызываю это в веб-приложении   -  person user123    schedule 13.05.2016
comment
он ищет какой-то абсолютный путь? что пишет ошибка?   -  person sidgate    schedule 13.05.2016
comment
Это ошибка. java.io.FileNotFoundException: config\abc.properties (система не может найти указанный путь)   -  person user123    schedule 13.05.2016
comment
но тот же код работает в автономном режиме   -  person user123    schedule 13.05.2016
comment
Если вы хотите взять из WEB-INF, правильный способ получить из ServletContext getResourceAsStream(yourFilePath) stackoverflow.com/questions/1108434/, потому что вы используете веб-приложение< /б>   -  person M. Mariscal    schedule 13.05.2016
comment
хорошо, и если я хочу использовать FileInputStream, то где мне нужно разместить свой файл?   -  person user123    schedule 13.05.2016
comment
этот парень объясняет хорошие методы работы с FileInputStream order-to-load-r" title="как найти рабочую папку приложения на основе сервлета для загрузки r">stackoverflow.com/questions/6584054/   -  person M. Mariscal    schedule 13.05.2016


Ответы (3)


Ресурсы - это не файлы. Они не живут в файловой системе, и к ним нельзя получить доступ через File или FileInputStream.

Вы должны использовать Class.getResource().

person user207421    schedule 13.05.2016
comment
но почему я могу получить к нему доступ в отдельной программе? - person user123; 13.05.2016
comment
Поскольку в автономной программе вы не используете файл JAR, вы получаете доступ к классам из файловой системы. - person user207421; 13.05.2016

Попробуйте с помощью

  ResourceBundle resource = ResourceBundle.getBundle("test");
  String VALUE1=resource.getString("KEY1");
  String VALUE2=resource.getString("KEY2");
person KhAn SaAb    schedule 13.05.2016
comment
в порядке. но почему FileInputStream не работает... например, почему это работает для автономного режима, но не для Интернета? - person user123; 13.05.2016

Вы должны использовать этот код для получения ресурсов в веб-приложении, потому что путь должен быть взят из ServletContext, я думаю, это то, что вы ищете, если вы находитесь внутри сервлета:

InputStream is = getContext().getResourceAsStream("/WEB-INF/yourFolder/abc.properties");

чтобы получить полный путь для вашего интереса:

String fullPath = getContext().getRealPath("/WEB-INF/yourFolder/abc.properties");
person M. Mariscal    schedule 13.05.2016