Witam,
Jak odniesc sie do pliku aby zawsze wskazywal na plik ktory znajduje sie w tym samym folderze co plik jar.
File rankingFile = new File("plik.txt");
Pisząc jak wyżej działa, ale tylko jeśli odpalamy z katalogu ręcznie plik jar. Przy odpalaniu z konsoli program nie znajduje tego pliku
new File(".\\plik.txt");
Albo w drugą stronę ukośnik :P
Niestety przy uruchamianiu przez konsole dalej nie wykrywa pliku
Bo w ten sposób zawsze dostajesz current working directory, a nie katalog w którym leży jar. A jak spróbujesz zrobić coś w stylu:
Jakaśtam.class.getResource("../plik.txt")
?
Nie mam pojecia jak to wstawic:
File rankingFile = new File (this.class.getResource("../plik.txt"));
tak jest zle
Nie znajduje pliku new File (this.getClass().getResource("../plik.txt").toURI());
@Shalom: zasoby w ten sposob mozesz pobierac tylko i wylacznie jesli sa one w classpath. Taki byle jaki plik na dysku nie jest. Nauczcie sie wszyscy jak dziala cp i zasoby a nie pierdzielcie glupot...
Do autora: jesli plik lezy zawsze kolo jara, to aby dzialalo musisz w javie pobrac katalog w ktorym lezy aplikacja (jar lub folder z klasami). Na forum juz wielokrotnie sie przewijalo jak to zrobic, cos w stylu:
File appDir = new File(JakasKlasa.class.getProtectionDomain().getCodeSource().getLocation().toURI());
File f = new File(appDir, "jakisPlik.txt")
(moga byc bledy)
To dlatego, że taki plik po prostu nie istnieje...
".." - wskazuje na folder wyżej
jeśli chcesz go czytać, to nie jest Ci potrzebny obiekt File ... getResourceAsStream zwróci od razu InputStream
appDir = new File (NAZWA KLASY.class.getProtectionDomain().getCodeSource().getLocation().getPath());
rankingFile = new File(appDir, "PLIK");
Tak niestety nie działa.
String decoded = URLDecoder.decode(this.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
File fileOuttemp = new File(decoded);
File cwd = fileOuttemp.getParentFile();
String folder_jara = cwd.getPath()
to mi zwraca poprawnie zawsze folder z jarem tylko nie wiem teraz jak dokleić do tego ten plik który jest w tym folderze.
Rozwiazanie:
String decoded = URLDecoder.decode(this.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
File fileOuttemp = new File(decoded);
File cwd = fileOuttemp.getParentFile();
String dirpath = cwd.getPath();
plik = new File(dirpath, "/plik.txt");
Zwróci zawsze się do pliku z katalogu z jarem nie ważne jak odpalanego. :)
Tego slasha przed "plik.txt" nie potrzebujesz, File sam doklei i to taki ktory jest natywny dla danego OS.