Mam projekt z 2 pakietami:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
W pakiecie (2) mam plik tekstowy ListStopWords.txt
, w pakiecie (1) mam klasę FileLoadder
. Oto kod w FileLoader
:
File file = new File("properties\\files\\ListStopWords.txt");
Ale mam ten błąd:
The system cannot find the path specified
Czy możesz podać rozwiązanie, aby to naprawić? Dzięki.
properties.files
dla2
?Odpowiedzi:
Jeśli jest już w ścieżce klas, po prostu pobierz ją ze ścieżki klasy zamiast z dysku systemowego. Nie majstrować przy ścieżkach względnych
java.io.File
. Są one zależne od bieżącego katalogu roboczego, nad którym nie masz całkowitej kontroli z wnętrza kodu Java.Zakładając, że
ListStopWords.txt
znajduje się w tym samym pakiecie co twojaFileLoader
klasa, wykonaj:Lub jeśli wszystko, czego ostatecznie szukasz, jest w rzeczywistości
InputStream
tym:Jest to z pewnością preferowane w stosunku do tworzenia pliku,
new File()
ponieważurl
niekoniecznie musi reprezentować ścieżkę systemu plików na dysku, ale może również reprezentować ścieżkę wirtualnego systemu plików (co może się zdarzyć, gdy plik JAR zostanie rozszerzony do pamięci zamiast do folderu tymczasowego w systemie plików na dysku) lub nawet ścieżka sieciowa, która nie jest z definicji przyswajalna przezFile
konstruktora.Jeśli plik to -jak wskazówka dotycząca nazwy pakietu- jest w rzeczywistości pełnowartościowym plikiem właściwości (zawierającym
key=value
wiersze) z tylko „złym” rozszerzeniem, to możesz podaćInputStream
natychmiast doload()
metody.Uwaga: kiedy próbujesz uzyskać do niego dostęp z
static
kontekstu wewnętrznego , użyjFileLoader.class
(lub cokolwiekYourClass.class
) zamiastgetClass()
w powyższych przykładach.źródło
FileLoader
to własna klasa OP. To powinna być dokładnie ta klasa, w której próbujesz zdobyć zasób. Tak więcNameOfYourCurrentClass.class.getResourceAsStream(...)
. OperacjaClassLoader.class
zakończy się niepowodzeniem, jeśliClassLoader
klasa jest ładowana przez inny program ładujący klasy, co może się zdarzyć w aplikacji „korporacyjnej” z hierarchią wielu programów ładujących klasy (np. W aplikacji internetowej Java EE).Poniższego wiersza można użyć, jeśli chcemy określić względną ścieżkę do pliku.
źródło
InputStream
?InputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
Ścieżka względna działa w java przy użyciu rozszerzenia. operator.
Pytanie brzmi więc, skąd znasz ścieżkę, w której obecnie szuka Java?
zrób mały eksperyment
Obserwuj dane wyjściowe, aby poznać bieżący katalog, w którym szuka java. Stamtąd po prostu użyj operatora ./, aby zlokalizować plik.
na przykład jeśli dane wyjściowe to
a plik znajduje się w folderze MyProject, którego po prostu użyj
Mam nadzieję że to pomoże
źródło
źródło
.class
dosłownego tylko podając pełną nazwę jego klasy.próbować
.\properties\files\ListStopWords.txt
źródło
Mógłbym to skomentować, ale mam za to mniejszą reputację. Odpowiedź Samrata wykonała pracę za mnie. Lepiej jest zobaczyć bieżącą ścieżkę katalogu za pomocą następującego kodu.
Po prostu użyłem go do naprawienia problemu, z którym miałem do czynienia w moim projekcie. Upewnij się, że używasz ./, aby wrócić do katalogu nadrzędnego bieżącego katalogu.
źródło
Chociaż odpowiedź udzielona przez BalusC działa w tym przypadku, zepsuje się, gdy ścieżka pliku zawiera spacje, ponieważ w adresie URL są one konwertowane na% 20, który nie jest prawidłową nazwą pliku. Jeśli skonstruujesz obiekt File przy użyciu identyfikatora URI, a nie String, białe znaki będą obsługiwane poprawnie:
źródło
Chciałem przeanalizować „command.json” w src / main // js / Simulator.java. W tym celu skopiowałem plik json do folderu src i podałem ścieżkę bezwzględną w ten sposób:
źródło
Zakładając, że chcesz czytać z
resources
katalogu wFileSystem
klasie.Uwaga: prowadzenie
.
nie jest potrzebne.źródło
Dla mnie problem polega na tym, że ścieżka klasy obiektu File pochodzi z
<project folder path> or ./src
, więc użyjFile file = new File("./src/xxx.txt");
rozwiązał mój problemźródło
String basePath = new File ("myFile.txt"). GetAbsolutePath (); ta ścieżka bazowa, której możesz użyć jako poprawnej ścieżki do pliku
źródło
Jeśli próbujesz wywołać
getClass()
metodę statyczną lub blok statyczny, możesz wykonać następujące czynności.Można zadzwonić
getClass()
naProperties
obiekcie ładowanego do.źródło
Jeśli plik tekstowy nie jest odczytywany, spróbuj użyć bliższej ścieżki bezwzględnej (jeśli chcesz, możesz użyć pełnej ścieżki bezwzględnej) w następujący sposób:
załóżmy, że ścieżka bezwzględna to:
źródło