2015-04-27 15 views
8

Używam IntelliJ IDEA 14 i chcę dodać plik poza src do pliku JAR. To jest moja obecna struktura projektu.Jak dodać plik zasobów do JAR w IntelliJ

Chcę dodać layout.txt i saveddata.txt do pliku wykonywalnego JAR. Już go szukam przez jakiś czas, nie mogę znaleźć rozwiązania

Jeśli potrzebujesz zobaczyć mój kod. Jest to, jak czytam plik

private Path layoutPath = Paths.get("resources/layout.txt"); 
content = new String(Files.readAllBytes(layoutPath)); 

Tu jest mój struktury projektu

Layout Structure

Odpowiedz

9
  1. Utwórz folder o nazwie „zasoby” na tym samym poziomie co „src”
  2. prawym przyciskiem myszy folder, wybierz "Mark Directory As -> Resources Root"

enter image description here

+0

Nadal daje mi wyjątek NoSuchFileException. Oznacziłem go jako Główny zasób. –

+2

Prawdopodobnie masz na myśli, że twoja aplikacja daje ci NSFE. Oddzielne pytanie, jeśli tak, proszę zamieścić swój kod. Ogólna forma to '' 'getClass(). GetResource ("/path/image.png ")' ''. –

+0

Dodałem kod. Czy możesz to sprawdzić ponownie? Dzięki: D –

4
  • Dodać nowy katalog z nazwą jako „zasobów” pod swoim katalogu głównym projektu.
  • Kliknij ten katalog prawym przyciskiem myszy i wybierz "Oznacz katalog jako" ==> Opcja "Źródła zasobów".
+0

Nadal daje mi NoSuchFileException po przebudowaniu –

+0

@ Renges: kod używa ścieżki względnej, co sprawia, że ​​zależy to od bieżącego katalogu roboczego JVM, który uruchamia testy. Bardziej niezawodnym sposobem odczytywania plików zasobów jest 'getClass(). GetClassLoader(). GetResourceAsStream()' lub, w razie potrzeby, 'getClass(). GetClassLoader(). GetResource()'. W środowisku J2EE zwykle używa się "Thread.currentThread(). GetContextClassLoader(). GetResourceAsStream()". – Ranjeet

+0

@Ranjeet, myślę, że 'getClassLoader(). GetResourceAsStream' jest właściwą drogą. Czy możesz edytować odpowiedź i opracować? dzięki. – 0x90

-1

To wciąż dla mnie. Próbowałem:

+ "Mark Directory As" ==>"Resources Root" 
+ getClassLoader().getResourceAsStream() 
+ getClass().getClassLoader().getResource() 
and Thread.currentThread().getContextClassLoader().getResourceAsStream() 
Powiązane problemy