2012-05-08 3 views
0

Я разрабатываю проект с Maven. В классе для отправки сообщений электронной почты, в режимах run и dev я получаю следующую ошибку: Caused by: java.io.FileNotFoundException: jQuery/images/logo.png (Ficheiro ou directoria inexistente) ==> translation = Файл или каталог не найден.Maven java.io.FileNotFoundException

Я пробовал много путей, например «./jQuery/images/logo.png», «/jQuery/images/logo.png» и другие. Полный относительный путь: «src/main/webapp/jQuery/images/logo.png».

В папке «target» путь «project-1.0-SNAPSHOT/jQuery/images/logo.png». Файл внутренней войны - «jQuery/images/logo.png».

Я не думаю, что это важно, но я использую NetBeans 7.1.1 в качестве IDE.

Я обнаружил, что абсолютный путь, возвращаемый во время выполнения, это «/home/user/apache-tomcat-7.0.22/bin/jQuery/images/logo.png»! ... Это не путь к проекту!

Как я могу получить файл в папке webapp и потомках из класса Java в проекте Maven?

Код:

MimeBodyPart attachmentPart = null; 
     FileDataSource fileDataSource = null; 
     for (File a : attachments) { 
      System.out.println(a.getAbsolutePath()); 

      attachmentPart = new MimeBodyPart(); 
      fileDataSource = new FileDataSource(a) { 

       @Override 
       public String getContentType() { 
        return "application/octet-stream"; 
       } 
      }; 
      attachmentPart.setDataHandler(new DataHandler(fileDataSource)); 
      attachmentPart.setFileName(fileDataSource.getName()); 

      multipart.addBodyPart(attachmentPart); 
     } 

     msg.setContent(multipart); 
     msg.saveChanges(); 

     Transport transport = session.getTransport("smtp"); 
     transport.connect(host, from, "password"); 
     transport.sendMessage(msg, msg.getAllRecipients()); 
+0

Показать код, который вы используете, чтобы открыть файл. –

+0

Благодарим за быстрый ответ! – ricardoc

ответ

0

Путь .../apache-tomcat-7.0.22/bin/jQuery/... действительно странно. bin содержит сценарии для Tomcat, он не должен содержать никакого кода и каких-либо ресурсов, связанных с вашим приложением. Даже если вы развернете свое приложение в контексте /bin, ресурсы будут в конечном итоге под `.../apache-tomcat-7.0.22/webapps/bin/...

Это похоже на ошибку, допущенную в более раннем развертывании.

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

String absolutePath = getServletContext().getRealPath("/jQuery/images/logo.png"); 

(docs)

+0

Я не использую сервлет. Является регулярным Java-классом, если я могу назвать его так ... public class EmailsManager {...} – ricardoc

+0

В этом классе с помощью System.getProperty («java.class.path») я получаю:/home/user/апач-кот-7.0.22/бен/bootstrap.jar: /home/rcc/apache-tomcat-7.0.22/bin/tomcat-juli.jar. Что это значит? – ricardoc

+0

Ну, мы сделали это! Спасибо, Аарон. Я использовал ваше предложение в JSP, которое вызывает класс Java. Новый код, используемый в JSP: Вложение строк = (String) request.getParameter ("attachment"); // одиночный демонстрационный файл String attachmentRealPath = request.getSession(). getServletContext(). getRealPath (attachment + "/"); ArrayList вложения = новый ArrayList(); attachments.add (новый файл (attachmentRealPath)); EmailsManager emails = new EmailsManager (хост, порт, from, to, subject, bodyText, вложения); – ricardoc