Witam,
mam takowy problem:
piszę aplikację która coś tam ma robić (co tu już nieistotne) i ustawienia programu chciałem zapisywać w jednej z dwóch form:
plik ini - z tym miałem najmniej problemów
lub w sqlite - bo oprócz tego dorzuciłbym sobie jeszcze zapisywanie różnych statystyk, więc to rozwiązanie dla mnie znacznie lepsze by było, aczkolwiek nie płakałbym, gdyby nie było, plik ini mi wystarczy
odczyt pliku ini działa ładnie - zero problemów:
p.load(this.getClass().getResourceAsStream("/FTControl/properties.ini"));
p - Properties()
jednak mam problem z zapisem, ponieważ getResourceAsStream nie mogę użyć - zwraca InputStream, a do zapisu potrzebny mi OutputStream, więc zrobiłem tak:
FileOutputStream out = new FileOutputStream(this.getClass().getResource("/FTControl/properties.ini").getFile());
no i jak uruchamiam aplikację w IDE (NetBeans) wszystko działa dokładnie tak jak potrzebuję, .getResource() spełnia swoją funkcję idealnie. Problem zaczyna się w przypadku spakowania całości w jar i uruchomienie poza IDE - zwraca błąd:
"java.io.FileNotFoundException: file:\D:\ ...(ścieżka do projektu)... \FTControl.jar!\FTControl\properties.ini (The filename, directory name, or volume syntax is incorect)"
po przejrzeniu wielu stron na ten temat sprawdziłem dokładnie wielkości liter: wszystko się zgadza, wielkości są takie jak powinny - zresztą jakby wielkości liter były złe, to i by getResourceAsStream() też się wywalało - a działa bardzo dobrze
sqlite w ogóle nie mogę zrobić, bo muszę plik bazy otwierać poprzez getResource() i w IDE oczywiście otwiera prawidłowo - w systemie już nie - błąd ten sam, nie może znaleźć pliku
zawartość paczki (rozpakowanej):
...(ścieżka do projektu)... \FTCONTROL
+---FTControl
| | Main.class
| | properties.ini
| |
| ---images
....
Znalazłem jedną wydaje mi się sensowną poradę, że w czasie pakowania (w tamtym przypadku Eclipse) nie zachowuje ścieżek w środku jara, i trzeba gdzieś zaznaczyć, że ma to zostawiać tak jak jest
macie jakieś porady jak to naprawić/obejść, żeby aplikacja mogła otwierać i zapisywać plik w środku paczki?
z góry dzięki :)
(a jeśli jest coś z powodu moje przeoczenia to nie bijcie [za mocno] :P )
EDIT: aha, i jeszcze jedno: pisane na Windowsie :P