Jestem zaznajomiony z uzyskiwaniem zawartości pliku właściwości z podaniem nazwy pliku i oczywiście MyClass.class.getResource ("*. Properties") nie będzie działać, ale jak mogę uzyskać listę WSZYSTKICH plików właściwości znajduje się w tym samym pakiecie co moja klasa?Czy możliwe jest dynamiczne ładowanie wszystkich plików właściwości zawartych w pakiecie? tj. MyClass.class.getResource ("*. properties");
Odpowiedz
Możesz robić tego rodzaju rzeczy z Wiosna. Zobacz 4. Resources, w szczególności (lub notabily?) (Lub principalementely?) (Lub głównie?) Na 4.7.2 Wildcards in application context constructor resource paths.
Przekleństwa, ktoś ukradł mój grzmot :) Zrób ciasteczko. +1 – skaffman
Zakładając, że nie jest on zapakowany w JAR, można użyć do tego celu File#listFiles()
. Oto przykład kickoff:
String path = MyClass.class.getResource("").getPath();
File[] propertiesFiles = new File(path).listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".properties");
}
});
Jeśli to JAR-pakowane, to trzeba trochę więcej kodu, aby rozpocząć JarFile
API. Możesz znaleźć inny przykład w this answer.
Niestety, nie Plik jest dozwolony. Klasa nie jest obecnie w słoiku ... ale nie wiem, co przyniesie przyszłość dla mojej klasy i nie mam żadnej kontroli nad środowiskiem, w którym to nastąpi, więc musi być tak rozłączona, jak to możliwe – Stoney
Przepraszam ... nie mam wystarczającej liczby punktów, aby zagłosować na odpowiedź jeszcze raz ... – Stoney
To jak to zrobiłem,
Class<? extends Object> clazz = AnyKnownClassInTheJar.class;
String classFileName = clazz.getSimpleName() + ".class";
URL classResource = clazz.getResource(classFileName);
if (!"jar".equals(classResource.getProtocol())) {
// Class not from JAR
return;
}
JarURLConnection classConnection = (JarURLConnection)classResource.openConnection();
JarFile jar = classConnection.getJarFile();
for (Enumeration<JarEntry> i = jar.entries(); i.hasMoreElements();) {
JarEntry entry = i.nextElement();
if (entry.getName().endsWith(".properties")) {
// Load the property file
}
}
Awesome! Działa to nawet na Androidzie. Sztuczka polega na tym, że zaczyna się od 'classResource = AnyClassInTheApp.class.getResource ("/AndroidManifest.xml ")'. Wpisy wymienione w słoiku będą zawartością APK. – TWiStErRob
- 1. Jak uzyskać listę wszystkich plików (lub modułów) zawartych w pakiecie w pakiecie Webpack
- 2. Czy w szynach możliwe jest dynamiczne ładowanie układu klas?
- 3. ładowanie .properties w spring-context.xml i persistence.xml
- 4. Czy możliwe jest posiadanie metod zawartych w Methods?
- 5. Czy możliwe jest wymodelowanie wszystkich właściwości DateTime jako DateTime2?
- 6. Lista wszystkich plików w pakiecie homebrew
- 7. dodając komentarz w .Properties plików
- 8. Czy jest możliwe dynamiczne tworzenie UITextView?
- 9. lista wszystkich plików nagłówkowych zawartych w pliku C
- 10. OneJar i dynamiczne ładowanie klasy
- 11. Czy jest możliwe podanie listy niestandardowych przerwań w pakiecie RTextTools?
- 12. Czy możliwe jest iteracyjne przeglądanie wszystkich klas w pakiecie z odbiciem?
- 13. Dynamiczne adresy URL RSL. Czy to możliwe?
- 14. Jakie są konwencje nazewnictwa plików Java .properties?
- 15. Czy jest możliwe dynamiczne zwrócenie certyfikatu SSL w NodeJS?
- 16. Czy możliwe jest dynamiczne rejestrowanie pakietów w Symfony2?
- 17. Zagnieżdżanie plików w pakiecie Nuget bez PowerShell
- 18. Java - Dynamiczne ładowanie klas
- 19. Czy złe jest umieszczanie plików właściwości/plików konfiguracyjnych w słoikach?
- 20. Czy jest możliwe dynamiczne kompilowanie i wykonywanie fragmentów kodu C#?
- 21. Dynamiczne ustawianie właściwości trwałości JPA
- 22. Dynamiczne opcjonalne właściwości w Swift 2.0
- 23. Czy jest możliwe pośrednie ładowanie typu wartości na stosie
- 24. Czy możliwe jest zainicjowanie właściwości w miejscu deklaracji?
- 25. Czy możliwe jest uwzględnienie właściwości nadrzędnych w rozszerzonej klasie Sass?
- 26. Dynamiczne nazwy właściwości w VBA
- 27. Konfiguracja chmur wiosennych - ładowanie dodatkowych plików
- 28. Adnotacja Java i dynamiczne ładowanie
- 29. Jak uzyskać wszystkie obsługiwane właściwości CSS w pakiecie WebKit?
- 30. Ładowanie plików w Prologu
To jest łatwe z wiosną, więc na znikoma szansa, że używasz go, mogę dać Ci odpowiedź Wiosna oparte. – skaffman
Ok ... więc zaczynam myśleć, że to niemożliwe. Z mojego rozumowania Java korzysta z leniwego ładowania klas i dlatego program ładujący klasy nie wie, co jest w pakiecie, dopóki nie zostanie poproszony o pobranie klasy. Najbliższą rzeczą, jaką mogę wymyślić, jest * próba * rozwiązania nazwy pakietu do katalogu, zdobycie listy rekwizytów. pliki w katalogu i próby załadowania ich za pomocą metody class.getResource(). Wiem, że to hack; czy istnieje lepszy sposób? – Stoney
Aha! To brzmi, jakby to zadziałało, każda odpowiedź wykorzystująca Spring jest całkiem do przyjęcia i byłaby bardzo doceniana – Stoney