2011-01-08 22 views
5

Jak byś otworzył plik .xml, który jest w .jar i edytować go?Otwórz i edytuj plik .jar z Javą?

Wiem, że można zrobić ...

InputStream myStream = this.getClass().getResourceAsStream("xmlData.xml"); 

Ale jak można otworzyć xmlData.xml, edytować plik i zapisać go w JAR? Byłbym przydatny, aby wiedzieć i nie chcę edytować pliku poza .jar ... , a aplikacja musi działać przez cały czas!

Dziękujemy!

+0

to aplikacja, która modyfikuje plik xml wewnątrz samego pliku JAR xmlData.xml? – Enrique

+0

są jednym w tym samym ... .jar ma plik .xml wewnątrz ... uruchomię plik .jar i chcę, aby aplikacja .jar edytowała .xml wewnątrz niego. – Zeveso

Odpowiedz

3

Pliki jar są po prostu plikami .zip z różnymi przyrostkami plików i konwencjami nazewnictwa dla zawartości. Więc używaj klas od java.util.zip do czytania i/lub zapisywania treści.

Nie można zagwarantować (a nawet prawdopodobnie) modyfikowania zawartości, aby uruchomić uruchomiony system, ponieważ moduł ładujący klasy może buforować zawartość według własnego uznania.

Dobrze więc wiedzieć więcej o tym, co faktycznie chcesz osiągnąć dzięki temu. Modyfikowanie zawartości słoja w locie brzmi jak skomplikowane i podatne na błędy podejście ...

+0

Chcę przechowywać wszystkie moje dane w pliku .xml w pliku .jar ... będą to takie rzeczy jak poczta e-mail i takie – Zeveso

+0

. Czy zachowujesz dane w pliku xml w pliku .jar? Co się stanie, gdy musisz ponownie wdrożyć aplikację? Zakładając, że chcesz pozostać przy użyciu XML. Powinieneś rozważyć zachowanie pliku .xml poza aplikacją i użycie konfiguracji (być może za pomocą pliku .properties lub ze Spring?), Aby ustawić lokalizację w systemie plików tego pliku xml. Zawartość .jars należy pozostawić w spokoju, aby zapewnić integralność binarną. – whaley

+1

Naprawdę nie sądzę, że można to zrobić w czysty sposób. Najpierw musisz rozwiązać problem znajdowania pliku JAR w pierwszej kolejności (chodzenie po drzewie klas ładujących lub sprawdzanie parametrów uruchamiania procesu Java). Następnie za pomocą pliku java.util.zip rozpakuj plik, edytuj i zapakuj plik, a następnie pomódl się, aby buforowanie klas ładujących odczytało zaktualizowany plik. Nie powinno się tego robić :). –

1

Jeśli aplikacja. ma GUI i masz dostęp do strony/serwera, JWS może być odpowiedzią. Interfejs API JNLP dostępny dla aplikacji JWS. zapewnia usługi takie jak usługa PersistenceService. Oto mały demo. of the PersistenceService.

Pomysł polegałby na sprawdzeniu kodu XML w magazynie trwałości JWS. Jeśli go tam nie ma, zapisz go, w przeciwnym razie użyj wersji buforowanej. Jeśli się zmieni, napisz nową wersję do sklepu.

Demo. pisze do sklepu po zamknięciu i czyta przy starcie. Ale nie ma powodu, że nie może być nazywany przez menu, timer itp