2013-06-27 13 views
42

Należy przyjąć standardową konfigurację maven.Jak uzyskać absolutną ścieżkę do pliku w folderze/resources w projekcie

Powiedz w swoim folderze z zasobami, że masz plik abc.

W języku Java, w jaki sposób mogę uzyskać absolutną ścieżkę do pliku?

+0

Czy chcesz napisać plugin Maven? A może chcesz uzyskać dostęp do pliku po uruchomieniu programu? –

+0

Powiązane: http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

Odpowiedz

14

Można utworzyć obiekt i użyć FilegetAbsolutePath metody:

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

Porada o ograniczonym wykorzystaniu, ponieważ polega na katalogu roboczym jako maven korzeń. I nawet wtedy powinieneś raczej użyć 'target/classes/abc.txt', aby odwołać się do pliku, ponieważ jest to kanoniczne miejsce, w którym Maven umieszcza pliki zasobów po przetworzeniu (na przykład wtyczka maven-resources mogła dokonać zmiany właściwości na abc.txt). Znacznie lepiej jest użyć abc.txt przez getResource() ze ścieżki klasy. –

+1

Co zrobić, jeśli użytkownik końcowy uruchamia aplikację jako plik wykonywalny JAR? Wtedy nie będzie fizycznego pliku w ogóle. Jest to kolejny powód, dla którego powinieneś użyć funkcji getResource() i np. otwórz strumień wejściowy, zależnie od tego, co chcesz z nim zrobić. –

+4

Czy można to usunąć jako poprawną odpowiedź? @Karol S odpowiedział poniżej - to powinna być poprawna odpowiedź (stąd różnica w rozkładzie) – DanGordon

104

właściwy sposób, że rzeczywiście działa:

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

To nie ma teraz znaczenia, gdzie plik w ścieżce klasy jest fizycznie , zostanie znalezione, dopóki zasób jest w rzeczywistości plikiem, a nie wpisem JAR.

(Pozornie oczywiste new File(resource.getPath()) nie działa na wszystkich ścieżkach! Droga jest nadal URL zakodowany!)

+3

Lub prawdopodobnie mógłbyś po prostu zrobić: 'nowy plik (resource.toURI()). GetAbsolutePath();' (nie sądzę, że potrzebujesz obiektu Path?) –

+1

Dobra wskazówka na temat toURI(), dzięki temu przestrzenie na twojej ścieżce wychodzą jako% 20! –

+17

Dzięki! To prawie dla mnie zadziałało. Ale musiałem dokonać jednej zmiany: YourClass.class.getClassLoader(). GetResource ("abc"); – yngwietiger

11

Musisz specifie ścieżka zaczęła od /

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

Tworzenie instancji ClassLoader z następujących klasę, której potrzebujesz, możesz łatwo uzyskać dostęp do plików lub zasobów. teraz ścieżka dostępu przy użyciu metody getPath() tej klasy.

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path);