datei laden und wieder speichern

rosmi

Mitglied
Problemstellung: Es gibt eine Property-Datei, die im classpath liegt, und die ausgelesen,

verändert und wieder gespeichert werden soll.

Ausgelesen kann die Datei mit InputStream inputStream =

getClass().getResourceAsStream("/my/package/resource/Config.properties");
Dann properties.load(inputStream);

Wie kann ich aber diese Datei genau dort zu speichern, wo sie sich vor dem Auslesen befand?

Wenn es einen Weg gäbe, aus dem InputStream einen File oder FileInputStream zu erzeugen...
 
Original geschrieben von rosmi
Problemstellung: Es gibt eine Property-Datei, die im classpath liegt, und die ausgelesen,

verändert und wieder gespeichert werden soll.

Ausgelesen kann die Datei mit InputStream inputStream =

getClass().getResourceAsStream("/my/package/resource/Config.properties");
Dann properties.load(inputStream);

Wie kann ich aber diese Datei genau dort zu speichern, wo sie sich vor dem Auslesen befand?

Wenn es einen Weg gäbe, aus dem InputStream einen File oder FileInputStream zu erzeugen...

Ich werde auf die Schnelle nicht schlau aus
Code:
InputStream inputStream =  getClass().getResourceAsStream("/my/package/resource/Config.properties");

Du müsstest mal schauen, ob Du stattdessen nicht direkt als FileInputStream anlegen kannst, denn soweit ich sehe, ist FileInputStream von InputStream abgeleitet. Wenn Du dann also
Code:
FileInputStream inputStream =  getClass().getResourceAsStream("/my/package/resource/Config.properties");
benutzen könntest, hättest Du doch den gewünschten FileInputStream.
 
Hallo!

Wie wärs denn damit?

Die Datei Configuration.properties liegt wie die Klasse ConfigTool im Package config.

Inhalt von Configuration.properties:

Code:
#Configuration
#Sat May 29 19:50:04 CEST 2004
Username=scott
Host=localhost
Password=tiger
DatabaseName=orcl
Database=Oracle 9.2i
DriverClassName=oracle.jdbc.driver.OracleDriver
Port=1521

und hier die Klasse ConfigTool

Code:
/*
 * Created on 29.05.2004
 */
package config;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

/**
 * @author Administrator
 */
public class ConfigTool {

	public static void main(String[] args) {

		InputStream is =
			ConfigTool.class.getResourceAsStream(
				"/config/Configuration.properties");

		Properties props = new Properties();
		try {
			props.load(is);
		} catch (IOException e) {
			e.printStackTrace();
		}

		URL url =
			ConfigTool.class.getResource("/config/Configuration.properties");

		if (url == null)
			return;

		File file = new File(url.getFile());
		
		props.put("New_Entry","Hallo");

		try {
			BufferedOutputStream bos =
				new BufferedOutputStream(new FileOutputStream(file));
			if (bos == null)
				throw new IOException("bos was null");
				
			props.store(bos,"Configuration");
			

		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

Vielleicht hilfts dir ja.

Gruß tom
 
Re: Re: datei laden und wieder speichern

Original geschrieben von Snape
Ich werde auf die Schnelle nicht schlau aus
Code:
InputStream inputStream =  getClass().getResourceAsStream("/my/package/resource/Config.properties");


Du müsstest mal schauen, ob Du stattdessen nicht direkt als FileInputStream anlegen kannst, denn soweit ich sehe, ist FileInputStream von InputStream abgeleitet. Wenn Du dann also
Code:
FileInputStream inputStream =  getClass().getResourceAsStream("/my/package/resource/Config.properties");

Das würde ein Compilerfehler erzeugen, denn du versuchst eine Instanz
einer Spezialisierten Klasse mit einer BasisKlasseninstanz zu instanzieren.

Wenn dann müsste es so lauten:
FileInputStream inputStream = new FileInputStream(getClass().getResourceAsStream("/my/package/resource/Config.properties"));

Da FileInputStream einen InputStream aufnehmenden Construktor besitzt.
 
Hallo Zusammen,

ich habe im Moment genau das selbe Problem, nur möchte ich das alles aus einer RCP-Anwendung heraus machen. weiss jemand von euch wie das da funktioniert?
Benutze ich die oben angegebene Lösung bekomme ich immer nur "Das System konnte den angegebenen Pfad nicht finden". :(

Greetz

Bartleby40K
 
Zurück