Problem ze ścieżką do nowo tworzonego pliku.

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(); }
}
...

I zamiast tworzyć mi plik w głównym katalogu aplikacji (apl), getAbsolutePath zwraca mi /home/pawel/log.csv.
Zrobiłem test, i przy utworzeniu drugiej klasy (z main) i w niej zaimportowaniu SaveDo.java, plik log.csv tworzy mi w głównym katalogu aplikacji czyli tak jak bym chciał.
Jak załatwić sprawę w pierwszym przypadku, abym nie musiał podawać całej ściezki bezwzględnej do pliku podczas tworzenia obiektu File ?

Opcje przeglądania komentarzy

Wybierz preferowany sposób wyświetlania komentarzy i klinij na "Zapisz ustawienia", aby aktywować zmiany.

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.

ant's picture

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:

String path = getServletContext().getRealPath("csv.log");

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