2014-01-13 2 views
0

Я создаю проект Vaadin (в основном Java, который компилируется в html/javascript), и пытаюсь импортировать шаблон (в основном HTML-файл). Во всех смыслах и целях я просто импортирую файл в качестве входного потока. Вот код обижая:Java: Не удается прочитать файл в моем каталоге проектов?

File file = new File("C:/JavaProjects/VaadinSpikeWorkspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/CISTVaadinClient/VAADIN/themes/layoutsinteractionDetailsTabLayout.html"); 
InputStream is = null; 
CustomLayout custom = null; 
try { 
    is = new FileInputStream(file); 
} catch (FileNotFoundException e1) { 
    System.out.println("mark 1"); 
    e.printStackTrace(); 
} 

try { 
    custom = new CustomLayout(is); 
} catch (IOException e) { 
    System.out.println("mark 2"); 
e.printStackTrace(); 
} 

Что я делаю:

  • Развертывание проекта Vaadin (в основном динамический веб-проект с несколькими дополнительными .jars) для доступа и кот aadin проекта thVe с использованием мой браузер

Что я вижу:

  • пустой экран в браузере
  • Исключено из файла (например, отметка 1 ")
  • И в результате: IOException (т. «Mark 2»)

Что я проверил:

  • Файл определенно делает развертывание в котом с остальной частью проекта
  • Вне папки WebApps, файл я пытаюсь импортировать доступно через браузер после развертывания (т.е. Localhost/MyProject/myfile.html)
  • кота установить, нормально (это было свежей установка и работает с этим/другими проектами за пределами этой проблемы)

То, что я пытался

  • Используя относительный URL, или только имя файла (т.е. Новый файл («../webapps/vaadin/layouts/MyFile.html»))
  • Используя абсолютный путь к директории проекта
  • Используя абсолютный путь к каталогу развертывания (как описано выше)
  • Если собрать файл в другом месте (читайте: каждое возможное место в проекте)

Опять же, я пытаюсь просто прочитать файл MyFile.html в качестве входного потока. Что я делаю неправильно/не замечаю?

Спасибо за ваше время.

+0

перетащите файл в командную строку, чтобы вы получили путь или установили щелчок и получили свойства в проводнике Windows (я вижу ac: поэтому его окна?), А затем используйте блокнот/текстовую панель для замены всех \ с/или escape \\ – tgkprog

ответ

0

Просто чтобы сделать его более портативным: подумали ли вы о том, чтобы привести свои шаблоны в свой classpath? Что-то вроде

yourApp/WEB-INF/classes/templates/layoutsinteractionDetailsTabLayout.html 

Таким образом, вам нужно только эту строку кода, если вы не в Servlet или Spring Controller или Struts 1/2 действия или что-то под названием YourClass:

InputStream is = YourClass.class.getClassLoader().getResourceAsStream("templates/layoutsinteractionDetailsTabLayout.html"); 
+0

Это, безусловно, то, что я сделал бы, но я бы хотел, чтобы этот очень простой подход «читать файл» работал, прежде чем я попробовал что-то еще. – Paul

+0

В этом случае, возможно, вы читаете каталог, который слишком изменчив или временен или подвержен затмению. Вы пытались скопировать ваши шаблоны в известный каталог на вашем компьютере и попробовать свой код с этим маршрутом? –

0

у меня не было проблемы с чтением файлов при использовании VaadinService, который указывает на каталог WebContent (с META-INF, VAADIN и WEB-INF внутри).Если он работает в тестовой среде, а затем VaadinService не доступен, поэтому я использую такой кусок кода:

private static final String BASEDIR; 
static { 
    if (VaadinService.getCurrent() != null) { 
     BASEDIR = VaadinService.getCurrent().getBaseDirectory().getAbsolutePath(); 
    } else { 
     BASEDIR = "WebContent"; 
    } 
} 

затем перейти к папке Vaadin просто использовать

BASEDIR+="/VAADIN/restOfYourPath" 
0

Если вы действительно пытаетесь используйте этот файл в качестве HTML-шаблона, вам будет намного лучше использовать поддержку Vaadin для этого. У них есть CustomLayout, который загружает HTML-шаблон из вашей темы.

Ваш шаблон будет идти в папку, как следующее:

VAADIN/themes/mytheme/layout/layoutsinteractionDetailsTabLayout.html 

Обратите внимание, что mytheme это название вашей темы и layout является специально признанным каталог Vaadin в темах.

Ваш пользовательский компонент будет выглядеть:

public class InteractionDetailsTabLayout extends CustomLayout { 

    private static final String TEMPLATE = "layoutsinteractionDetailsTabLayout"; 

    public InteractionDetailsTabLayout() { 
    super(TEMPLATE); 
    } 

} 

Обратите внимание, что супер конструктор аргумент исключает суффикс каталогов и файлов.

Если вы действительно хотите, чтобы загрузить файл в веб-приложение, не возиться с ним в вашем VAADIN каталоге, но вместо того, чтобы поместить его в ваших путь к классам ресурсов и доступ к нему с ClassLoader.

Смежные вопросы