Mój projekt ma następującą strukturę:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Mam plik /src/test/resources/test.csv
i chcę go załadować z testu jednostkowego/src/test/java/MyTest.java
Mam ten kod, który nie działał. Narzeka „Brak takiego pliku lub katalogu”.
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Próbowałem też tego
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
To też nie działa. Powraca null
. Używam Maven do budowy mojego projektu.
this.getClass().getResource("/test.csv")
Odpowiedzi:
Wypróbuj następną:
Jeśli powyższe nie działa, do różnych projektów dodano następującą klasę: 1 (kod tutaj ). 2)
ClassLoaderUtil
Oto kilka przykładów użycia tej klasy:
Notatki
źródło
Object.class.getClassLoader();
%20
FileNotFoundException
Próbować:
IIRC
getResourceAsStream()
domyślnie odnosi się do pakietu klasy.Jak zauważył @Terran, nie zapomnij dodać
/
na początku nazwy plikuźródło
String
stackoverflow.com/a/35446009/544045Oto jedno szybkie rozwiązanie z użyciem Guava :
Stosowanie:
źródło
Wypróbuj kody Flowing w projekcie Spring
Lub w projekcie innym niż wiosenny
źródło
Projekt nie wiosną:
W przypadku projektów wiosennych możesz również użyć jednego kodu wiersza, aby uzyskać dowolny plik w folderze zasobów:
źródło
Teraz ilustruję kod źródłowy do odczytu czcionki z katalogu zasobów utworzonych przez maven,
To zadziałało dla mnie i mam nadzieję, że cały kod źródłowy również ci pomoże, ciesz się!
źródło
Dla java po 1.7
źródło
Jeśli użyjesz kontekstowego narzędzia ClassLoader do znalezienia zasobu, na pewno będzie to kosztować wydajność aplikacji.
źródło
Zaimportuj następujące elementy:
Następująca metoda zwraca plik z ArrayList of Strings:
źródło
Napotkałem ten sam problem .
Plik nie został znaleziony przez moduł ładujący klasy, co oznacza, że nie został spakowany do artefaktu (słoika). Musisz zbudować projekt . Na przykład z maven:
Tak więc pliki dodane do folderu zasobów przejdą do kompilacji maven i staną się dostępne dla aplikacji.
Chciałbym zachować swoją odpowiedź: nie wyjaśnia, jak czytać plik (inne odpowiedzi to wyjaśniają), odpowiada, dlaczego
InputStream
lubresource
był zerowy . Podobna odpowiedź jest tutaj .źródło
getResource () działał dobrze z plikami zasobów umieszczonymi
src/main/resources
tylko w. Aby uzyskać plik, który znajduje się w innej ścieżce niżsrc/main/resources
powiedz,src/test/java
że musisz go dokładnie utworzyć.poniższy przykład może ci pomóc
źródło
Czy kod działa, gdy nie jest uruchamiany jar kompilacji Maven, na przykład podczas uruchamiania z IDE? Jeśli tak, upewnij się, że plik faktycznie znajduje się w słoiku. Folder zasobów powinien zostać zawarty w pliku pom, w
<build><resources>
.źródło
Poniższej klasy można użyć do załadowania pliku
resource
z,classpath
a także odebrania odpowiedniego komunikatu o błędzie w przypadku wystąpienia problemu z podanymfilePath
.źródło
Rozwiązałem ten problem, dodając
/scr/main/resources
folder do mojegoJava Build Path
źródło
Mam to działa zarówno na działającym słoiku, jak i na IDE, pisząc jako
źródło
źródło
Możesz użyć com.google.common.io.Resources.getResource, aby odczytać adres URL pliku, a następnie pobrać zawartość pliku za pomocą java.nio.file.Files, aby odczytać zawartość pliku.
źródło
Sprawiam, że działa bez żadnego odniesienia do „class” lub „ClassLoader”.
Załóżmy, że mamy trzy scenariusze z lokalizacją pliku „example.file”, a katalog roboczy (w którym wykonuje się aplikacja) to home / mydocuments / program / projects / myapp:
a) Podfolder potomny katalogu roboczego: myapp / res / files / example.file
b) Podfolder niebędący potomkiem katalogu roboczego: projects / files / example.file
b2) Kolejny podfolder, który nie należy do katalogu roboczego: program / files / example.file
c) Folder główny: home / mydocuments / files / example.file (Linux; w Windows zamień home / na C :)
1) Wybierz właściwą ścieżkę: a)
String path = "res/files/example.file";
b)String path = "../projects/files/example.file"
b2)String path = "../../program/files/example.file"
c)String path = "/home/mydocuments/files/example.file"
Zasadniczo, jeśli jest to folder główny, rozpocznij nazwę ścieżki od wiodącego ukośnika. Jeśli jest to podfolder, ukośnik nie może znajdować się przed nazwą ścieżki. Jeśli podfolder nie jest katalogiem podrzędnym do katalogu roboczego, musisz wykonać do niego cd za pomocą „../”. Informuje to system o przejściu o jeden folder w górę.
2) Utwórz obiekt File, podając właściwą ścieżkę:
3) Teraz możesz już iść:
źródło