FileNofFoundException - błąd po kompilacji.

0

Witam.
Piszę małą aplikacje do monitorowania "żywotnosci" raspberry Pi. Jednak napotkałem mały problem przy próbie zapisania ostatniego używanego adresu IP do pliku w zasobach aplikacji (jako plik).
Otóż aplikacja po wprowadzeniu adresu hosta zapisuje do pliku "host" (/res/host) adres IP (tylko to jest w tym pliku), a następnie przy ponownym uruchomieniu wczytuje go z niego.
Oto kod wczytujący:

		try {
			File file = new File(LoginPanel.class.getClass().getResource("/res/host").getFile());
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			textField.setText(br.readLine());
			br.close();
			fr.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}

Oraz zapisujacy:

		try {
								File file = new File(LoginPanel.class.getClass().getResource("/res/host").getFile());
								FileWriter fw = new FileWriter(file);
								BufferedWriter bw = new BufferedWriter(fw);
								bw.write(textField.getText());
								bw.close();
								fw.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}

W eclipsie podczas uruchomienia go wszystko jest cacy, jednak po wyeksportowaniu go du uruchamialnego pliku .jar dostaje poniższy error:

C:\Users\allst\Desktop>java -jar RPIStatusClient.jar
java.io.FileNotFoundException: file:\C:\Users\allst\Desktop\RPIStatusClient.jar!\res\host (Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileReader.<init>(Unknown Source)
        at pl.allst.rpi.gui.LoginPanel.<init>(LoginPanel.java:56)
        at pl.allst.rpi.gui.LoginPanel.main(LoginPanel.java:28)

Proszę o pomoc,
Pozdrawiam
EDIT:
Wyglad struktury pliku:
user image

0

Spróbuj dodać pusty plik \res\host do .JARa. Jeśli dodasz go do projektu w Eclipsie, to w przyszłości przy eksportowaniu też powinien zostać dołączony.

1

Aj, czekaj.
Czy ten plik ma w zamierzeniu być wewnątrz .JARa?

0

Dla potomnych:
W bardzo prosty sposób można takie rzeczy robić, wystarczy użyć klasy java.util.Properties . Oto rozwiazanie:

//Odtworzenie, propDir,propFile oraz settings ustawiłem na zmienne prywatne klasowe w celu zachowania ich do pozniejszego użycia
		try {
			propDir = new File(System.getProperty("user.home"),".RPIClient");
			if(!propDir.exists())propDir.mkdir();
			propFile = new File(propDir,"program.properties");
			Properties defaultProp = new Properties();
			defaultProp.put("host","");
			
			settings = new Properties(defaultProp);
			
			if(propFile.exists()){
				FileInputStream fis = new FileInputStream(propFile);
				settings.load(fis);
				textField.setText(settings.getProperty("host"));
fis.close()
			}
		}catch(IOException e){
				e.printStackTrace();
		}
//A tutaj zapis, uzywanie powyzszych obiektow.
								settings.put("host", textField.getText());
								FileOutputStream fos = new FileOutputStream(propFile);
								settings.store(fos, "Program Settings");
								fos.close();

Dziękuje, do zamkniecia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.