Witam
Oto z czym wojuję:
Używam Tomcata, w którym w webapps mam prostą aplikację. Główny katalog aplikacji nosi nazwę "apl".
Posiadam tam stronę JSP page.jsp. Dodatkowo w pakiecie log znajduje się zwykła klasa SaveDo.java, która ma za zadanie zapisywać do pliku log.csv aktywność użytkowników (profesionalniej jest w BD ale tutaj zalezy mi na utworzeniu pliku). I problem mam następujący:
W klasie SaveDo.java mam:
..
File fileLog = new File("log.csv");
if( !fileLog.exists() ){
try { fileLog.createNewFile(); }
catch (IOException e) {
System.out.println(fileLog.getAbsolutePath());
System.out.println("Błąd przy próbie utworzenia pliku!");
e.printStackTrace(); }
}
...
Pomijając fakt że kod
Pomijając fakt że kod System.out.println(fileLog.getAbsolutePath()); wkleiłem w poście nie w ten blok co trzeba :-) , w skrócie chodzi mi o to, jak utworzyć ten plik NIE w katalogu domowym użytkownika systemu, tylko katalogu głównym aplikacji.
W Javie jest tak, że
W Javie jest tak, że wszystkie relatywne ścieżki liczone są względem katalogu, który jest katalogiem roboczym wirtualnej maszyny (czyli jest to katalog, z którego wystartowałeś javę). Jeśli interesują Cię lokalizacje względem kontekstu aplikacji musisz to zrobić inaczej:
w servlecie:
Oczywiście to zapisywanie do pliku zadziała tylko dla wypakowanych aplikacji (tzn. nie zadziała dla aplikacji spakowanych w archiwum WAR). Ogólnie zdrowiej jest nie pisać do katalogu aplikacji w ogóle, bo będziesz miał problemy z aktualizacjami takiego kontekstu i na bank kiedyś skasujesz sobie coś, czego byś kasować nie chciał. No ale to już inna historia.
--
piotr