Изучение структуры файла в приложении jar

У меня есть каталог в моей банке, называемый "уроки". Внутри этого каталога есть x число текстовых файлов урока. Я хочу пропустить все эти уроки, прочитав их данные.

Я, конечно, знаю, как читать файл с точным путем:

BufferedReader in = new BufferedReader(new InputStreamReader(Main.class.getResourceAsStream("lessons/lesson1.lsn")));
 try{
 in.readLine();
 }catch(IOException e){
 e.printStackTrace();
 }

Но то, что я хочу, это нечто большее:

File f = new File(Main.class.getResource("lessons"));
 String fnames[] = f.list();
 for(String fname : fnames){
 BufferedReader in = new BufferedReader(new InputStreamReader(Main.class.getResourceAsStream("lessons/" + fname)));
 in.readLine();
 }

Однако файл не использует URL-адрес в конструкторе, поэтому код не работает.

1 ответ

Я буду использовать junit.jar в своем тесте в качестве примера

String url = Test1.class.getResource("/org/junit"). ToString();

производит

jar:file:/D:/repository/junit/junit/4.11/junit-4.11.jar!/org/junit

позволяет извлекать путь в jar

String path = url.replaceAll("jar:file:/(.*)!.*", "$1");

это

D:/repository/junit/junit/4.11/junit-4.11.jar

теперь мы можем открыть его как JarFile и прочитать его

JarFile jarFile = new JarFile(path);
...

licensed under cc by-sa 3.0 with attribution.