Не делай этого.Вы никогда не можете гарантировать, что папка WAR доступна для записи или даже на физическом диске.Например, когда сервлет-контейнер настроен на расширение WAR в память, а не на диск.
Поскольку это, по-видимому, временный файл, просто используйте File#createTempFile()
:
File tempFile = File.createTempFile("filename", ".png");
// ...
Или используйте внешнюю папку в файловой системе с фиксированным диском, абсолютный путь которой равендля установки в качестве аргумента ВМ или какого-либо параметра конфигурации.
Обновление : вы можете использовать сервлет для отображения этого файла.Я понимаю, что это файл изображения.Вы можете использовать <h:graphicImage>
, в котором вы задаете имя файла временного файла в пути.
Например, внутри компонента:
this.filename = tempFile.getName();
, а затем в представлении:
<h:graphicImage value="images/#{bean.filename}" />
Сервлет, который должен прослушивать /images/*
, может выглядеть следующим образом (исключительные проверки для вашего упражнения опущены):
@WebServlet("/images/*")
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
File file = new File(System.getProperty("java.io.tmpdir"), request.getPathInfo());
response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Length", String.valueOf(file.length()));
InputStream input = new FileInputStream(file);
OutputStream output = response.getOutputStream();
// Now write input to output the usual way.
}
}