Как да получите достъп до ресурс / конфигурация / текстов файл във външен Jar от Java?

Изпълнявам програма в com.me.X.jar.

Във външен com.me.Y.jar имам конфигурационен файл, намиращ се в 'config/conf.txt' в корена на Jar.

Как мога да осъществя достъп до този конфигурационен файл програмно от Java?

com.me.Y.jar в момента не е зареден в паметта и се състои само от ресурси без код.


person user1991839    schedule 18.01.2013    source източник
comment
Включете буркана в пътя на класа и достъп до него като всеки нормален вграден ресурс   -  person MadProgrammer    schedule 19.01.2013
comment
@MadProgrammer може да е отговор. Трябва да бъде вграден. :)   -  person Andrew Thompson    schedule 19.01.2013
comment

Възможно ли е да анимирате филтъра за размазване на CSS3 с помощта на jQuery?

Това работи като статичен начин за прилагане на CSS правила:

item.css({'filter': 'blur('+blur+')','-webkit-filter': 'blur('+blur+')','-moz-filter': 'blur('+blur+')','-o-filter': 'blur('+blur+')','-ms-filter': 'blur('+blur+')'});

но когато заменя метода css с метода animate, нищо не се случва.

item.animate({'filter': 'blur('+blur+')','-webkit-filter': 'blur('+blur+')','-moz-filter': 'blur('+blur+')','-o-filter': 'blur('+blur+')','-ms-filter': 'blur('+blur+')'},500);

Има ли трик, за който не знам? Как мога да анимирам замъгляването на елемент?

  -  person Peter Kriens    schedule 20.01.2013


Отговори (3)


jar файловете са просто zip файлове. Така че потърсете в Google пример как да четете zip файл. Или погледнете API ZipInputStream

person MrSmith42    schedule 18.01.2013

Най-лесният вариант за четене на вградени ресурси е да използвате Class.getResource или Class.getResourceAsStream

Мога да измисля няколко начина за постигане на това в зависимост от вашите нужди.

Добавете com.me.Y.jar към classpath. Можете да направите това или на системно ниво (наистина не се препоръчва) или на линията за препоръки...

java -cp com.me.Y.jar -jar com.me.X.jar

Редактиране Беше отбелязано, че очевидно аргументът -cp се игнорира при използване на горната команда, но ако включите главния клас, ще работи...java -cp com.me.Y.jar -jar com.me.X.jar com.me.x.Main (например)

Ако това е неудобно, можете да добавите com.me.Y.jar към com.me.X.jar пътя на класа на манифеста което автоматично ще включва com.me.Y.jar за вас.

Ако не можете да направите това, можете да използвате URLClassLoader за директно зареждане на com.me.Y.jar...

URL[] urls = new URL[]{new File("/path/to/com.me.Y.jar").toURI().toURL())};
URLClassLoader classLoader = new URLClassLoader(urls);
URL resource = classLoader.findResource("/config/conf.txt");

Или, ако предпочитате, можете просто да отворите Jar чрез java.util.JarFile, но това изглежда много като чупене на орехи с ядрено оръжие...IMHO

person MadProgrammer    schedule 18.01.2013
comment
java -cp com.me.Y.jar -jar .. Когато е указано -jar, -cp се игнорира. Дайте сметка. - person Andrew Thompson; 19.01.2013
comment
!! Наистина... Боже, това е хубаво, трябва да използвам манифеста на буркана вместо това, глупако - person MadProgrammer; 19.01.2013
comment
Все още можете изрично да посочите main (& class-path). java -cp com.me.Y.jar com.me.X.jar com.me.X.Main - person Andrew Thompson; 19.01.2013
comment
@AndrewThompson (единствената причина да използвам # (т.е. Class#getResource) е, че хората изглежда смятат, че това е статична препратка в противен случай;)) - person MadProgrammer; 19.01.2013
comment
Можете да го редактирате обратно, когато промените CLI извикването. Винаги виждам, че документите са невалидни. Копирай постави. ;) - person Andrew Thompson; 19.01.2013
comment
@AndrewThompson Наистина трябва да се свържа с Документите, но наистина, ако хората не могат да търсят в Google, каква надежда имаме :P - person MadProgrammer; 19.01.2013

Код за получаване на URL

URL configURL = this.getClass().getResource("/config/conf.txt");

Manifest.mf of com.me.X.jar

Вижте Добавяне на класове към Classpath на JAR файла.

Main-Class: ...
Class-Path: com.me.Y.jar
person Andrew Thompson    schedule 18.01.2013