FileInputStream и FileNotFound Exception - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь получить файл jrxml по относительному пути, используя следующий код Java:

 String jasperFileName = "/web/WEB-INF/reports/MemberOrderListReport.jrxml";
 File report = new File(jasperFileName);
 FileInputStream fis = new FileInputStream(report);

Однако, скорее всего, мне не удалось определить относительный путь и получить ошибку java.io.FileNotFoundException: ошибка во время выполнения.

Поскольку я не настолько опытен в операциях ввода / вывода Java, я не решил свою проблему. Любая помощь или идеи приветствуются.

Ответы [ 5 ]

4 голосов
/ 13 марта 2012

Вы пытаетесь обработать файл jrxml как объект в файловой системе, но это не применимо внутри веб-приложения.

Вы не знаете, как и где будет развернуто ваше приложение, поэтому вы не можете указать File на него.

Вместо этого вы хотите использовать getResourceAsStream из ServletContext. Что-то вроде:

String resourceName = "/WEB-INF/reports/MemberOrderListReport.jrxml"
InputStream is = getServletContext().getResourceAsStream(resourceName);

это то, что вы ищете.

2 голосов
/ 13 марта 2012

Вы должны поместить 'MemberOrderListReport.jrxml' в classpath, например, включить его в jar-файл, помещенный в web-inf \ lib, или в виде файла в web-inf \ classes. Вы можете прочитать файл, используя следующий код:

 InputStream is=YourClass.class.getClassLoader().getResourceAsStream("MemberOrderListReport.jrxml");
1 голос
/ 13 марта 2012
String jasperFileName = "/web/WEB-INF/reports/MemberOrderListReport.jrxml";

Простой.У вас нет файла /web/WEB-INF/reports/MemoberOrderListReport.jrxml на вашем компьютере.

Вы явно выполняете в среде веб-приложения и ожидаете, что система автоматически разрешит это в контекстеконтейнера веб-приложения.Это не так.Для этого и нужны getRealPath() и друзья.

0 голосов
/ 13 марта 2012

Я видел подобные проблемы много раз, и ответ всегда один и тот же ...

Проблема в том, что путь к файлу не тот, который вы думаете.Чтобы понять это, просто добавьте эту строку после создания File:

System.out.println(report.getAbsolutePath());

Посмотрите на вывод, и вы сразу увидите, в чем проблема.

0 голосов
/ 13 марта 2012

проверьте, что ваш относительный базовый путь соответствует тому, который вы считаете следующим:

Файл f = новый файл ("test.txt");System.out.println (f.getAbsoluteFile ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...