Запись в файл из сервлета (Deployer: Tomcat) - PullRequest
0 голосов
/ 19 декабря 2010

Я использую следующий код для записи в файл из сервлета в контейнере Tomcat.Я не волнуюсь, перезаписывается ли файл во время каждого развертывания.

BufferedWriter xml_out = null;
try {
    xml_out = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream(getServletContext().getRealPath("/")
                + File.separator + "WEB-INF" + File.separator
                + "XML.xml"), "UTF8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
try {
    xml_out.write(xml);
    xml_out.flush();
    xml_out.close();
} catch (IOException e) {
    e.printStackTrace();
}

Однако запись файла не удалась (она не записывается на жесткий диск).Кроме того, нет никаких исключений, которые будут пойманы!Есть ли в Tomcat что-то, что мешает записи файла?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2010

В вашем коде есть "/" и разделитель файлов Windows в начале имени файла, переданного getRealPath(), Java интерпретирует косые черты в именах файлов в соответствии с текущей ОС.

Не использование разделителей файлов может дать лучший результат:

String filename = getServletContext().getRealPath("/WEB-INF/XML.xml");

log.debug("Using XML file: " + filename);

xml_out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename),"UTF8"));

Использование отдельной переменной для имени файла позволяет регистрировать его, чтобы вы могли видеть неожиданные результаты на ранних этапах процесса разработки.

0 голосов
/ 10 ноября 2015

У меня та же проблема. эта ссылка помогла мне понять, где находится файл на жестком диске.
Специально для меня он поместил файл в папку, возвращаемую этой строкой:

System.getProperty ( "user.dir");

В моем случае это было местоположение: C: \ Users \ Myself \ Programming \ eclipse для Java

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