Diskuze: Přístup ke složce v JAR souboru
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Myslíš ve svém vlastním (aplikace), nebo v nějakém jiném, externím? A myslíš jako přes kód, a nebo jenom vidět a "upravovat", co je uvnitř?
K souborům potřebuji ve své vlastní aplikaci přistoupit přes kód.
Není na tom nic zapeklitého ani rafinovaného. Řekněme, že chceš mít v jaru 'soubor.txt' ze kterého budeš chtít číst. Stačí když půjdeš do svého projektu, najdeš adresář src a v něm si vytvoř podadresář 'files'. Jméno si samozřejmě můžeš zvolit jiné.
Do něj nakopíruj 'soubor.txt'. Když dáš build tak se ten podadresář zkopíruje spolu s přeloženými třídami do adresáře 'build/classes' ve tvém projektu, který je základem pro obsah jar souboru. Soubor jar vlastně není nic jiného než ten adresář build/classes plus manifest.mf soubor zazipované dohromady.
Potom v kódu si z toho souboru uděláš input stream:
InputStream is = getClass().getResourceAsStream("/files/soubor.txt");
se kterým už můžeš dále pracovat normálně. Třeba pro čtení po řádcích získat BufferedReader:
BufferedReader br = new BufferedReader(new InputStreamReader(is));
Díky, funguje. Ale bohužel to neřeší můj problém, nenapsal jsem nic konkrétního - moje chyba. Mám složku se zvuky, které chci dynamicky získat a po kliknutí jeden náhodný přehrát.
Princip je obvykle stejný, jakmile máš jednou InputStream, tak obvykle najdeš něco co si s tím bude rozumět. Například jednoduché přehrání zvuku v souboru sound.wav:
InputStream is = getClass().getResourceAsStream("/files/sound.wav");
AudioPlayer.player.start(is);
Jak můžu získat obsah celé složky, tak abych nemusel vypisovat názvy všech souborů ve složce?
Myslel jsi něoc takového?
File file = new File("/sounds");
String[] sounds = file.list();
Random random = new Random();
String s = sounds[random.nextInt(sounds.length)];
//...... atd, viz výše
Tohle řešení funguje, jenom když je složka "sounds" vedle jar souboru, já ji ovšem chci mít přímo v něm. Potom:
file.list() //vrátí null
file.isDirectory() //vrátí false
Sry, trochu jsem pozapomněl...
File file = new File(getClass().getResource("/sounds").toString());
Tohle by už mělo jít
Vytvoř si InputStream z adresáře, ze kterého chceš vytáhnout seznam souborů,
InputStream is = getClass().getResourceAsStream("/files");
a tento InputStream čti pomocí BufferedReaderu, jak už jsem ukazoval výše, jako by to byl textový soubor - co řádek to název souboru v daném adresáři.
Zobrazeno 13 zpráv z 13.