У меня есть Spring webapp, чей файл .war
был загружен на сервер Tomcat. Большинство основных функций работают по назначению - просмотры страниц и представления формы.Tomcat сервер абсолютный доступ к файлам в war webapp
Моя проблема в том, что мой webapp должен читать и писать файлы, и я не знаю, как я могу это достичь (вывод ввода/вывода файлов java.lang.NullPointerException
).
Я использовал следующий code to get the absolute path of a given file предложенный Titi Wangsa Bin Damhore знать путь относительно сервера:
HttpSession session = request.getSession();
ServletContext sc = session.getServletContext();
String file = sc.getRealPath("src/test.arff");
logger.info("File path: " + file);
Здесь есть выходной путь:
/home/username/tomcat/webapps/appname/src/test.arff
Но когда я проверил файл каталога с помощью WinSCP , фактический путь файла:
/home/username/tomcat/webapps/appname/WEB-INF/classes/test.arff
Вот мои вопросы:
- Как превратить эти пути в нечто вроде
C:/Users/Workspace/appname/src/test.arff
(исходного пути в моей локальной машине, которая прекрасно работает)? Это серверыApache Tomcat 6.0.35
иApache Tomcat 6.0.35
. - Почему код возвращает другой путь в отличие от фактического пути?
- Если файл ввода-вывода не применим, какие альтернативы я могу использовать?
PS мне просто нужно открыть два файла (< 1MB каждая), так что я не думаю, что, возможно, придется использовать базу данных, чтобы содержать их в соответствии с предложением minus в this thread.
File I/O
Ниже приведен код, который я использую для доступа к файлу мне нужно.
BufferedWriter writer;
try {
URI uri = new URI("/test.arff");
writer = new BufferedWriter(new FileWriter(
calcModelService.getAbsolutePath() + uri));
writer.write(data.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
I Googled, как инициализировать 'ServletContext', но все они, похоже, создают для него новый класс. Как его инициализировать, если это только для этого класса? –
«ServletContext» - это объект, который уже должен быть доступен вашему сервлету. Я оставлю это упражнением для вас, чтобы выяснить, где его взять. Подсказка: прочитайте javadocs API сервлета. –