2012-09-27 13 views
6

dostaję plik tak:Get realnej ścieżki pliku w klasie Java

String myFile = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 
File statsFile = new File(myFile); 

Ale chcę tylko mieć względną ścieżkę jako stats/stats.csv. Nie chcę pisać pełnej ścieżki w moim kodzie.

W serwletu, robię to w ten sposób:

File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv"); 

Ale tutaj nie jest w serwletu. Więc jaki jest równoważny sposób w klasie java?

Odpowiedz

2

Powinieneś umieścić go w CLASSPATH i odczytać z InputStream uzyskanego przy użyciu getResourceAsStream(). Jest to ścieżka niezależna od dostępu do pliku.

+0

Mówi, że nie chce używać go w serwecie – Razvan

+0

Więc pobierz go z środowiska wykonawczego. – duffymo

+1

Można to zrobić poprzez 'SomeApplicationClass.class.getResourceAsStream()' –

0
String basePath = "D:/dev/workspace/MyProject/WebContent"; 
String absolutePath = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 

String relativePath = new File(basePath).toURI(). 
         relativize(new File(absolutePath).toURI()).getPath(); 

System.out.println(relativePath); // stats/stats.csv 

basePath jest ścieżką, w stosunku do którego chcesz uzyskać Relative Path.

+0

W rzeczywistości szukam sposobu na znalezienie 'basePath' bez jej zapisu. – Emilie

+0

@Jim .. Wtedy twoja praca jest nadal zmniejszona ... Zmierzyłem się również z tym samym problemem podczas pracy nad jednym z moich projektów .. wtedy tylko dowiedziałem się, że mogę to zrobić .. –

0

Znalazłem rozwiązanie. Mogę użyć mojego JSP, aby użyć File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv"), a następnie przekazać statsFile do mojej klasy.

Powiązane problemy