.properties Dateien auslesen

Zur Not könntest du die properties-Datei mit einem BufferedReader und einem FileInputStream Zeile für Zeile auslesen, dann hast du es in der richtigen Reihenfolge.

MFG

zEriX
 
es bleibt mir wahrscheinlich auch nichts anderes übrig. Naja dann muss ich es eben so machen. Hilft alles nicht.

Vielen Dank für eure Hilfe...

Gruß Serpil
 
Hallo zusammen,

wieso nehmt Ihr nicht einen Container, der die gewünschte Eigenschaft (gleiche Reihenfolge) zur Verfügung stellt? Es gibt eigentlich für jeden denkbaren Anwendungsfall etwas passendes. SET und TREESET sind das hier nicht, die sind für unsortierte bzw. sortierte Mengen ohne gleiche Elemente gedacht.

Als Container für gleichbleibende Reihenfolge würde ich LinkedList empfehlen. Da kann man die Elemente genau in der Reihenfolge wieder rausholen, in der man sie reingeworfen hat.
 
das habe ich auch schon probiert. Hab aber probleme damit die properties in der liste zu speichern.

Gruß Serpil
 
Also nach reiflicher Überlegung meine ich auch, Du müsstest Dich von der Properties-Klasse trennen. Die ist für Deine Anforderungen ungeeignet, wie Kulabac erklärt hat.

Ich würde jetzt auf Basis einer LinkedList (oder zwei, eine für Property.name und eine für den entsprechenden Property.value) eine neue Klasse definieren, die dann nach zerix ´s Idee de-/ serialisierbar ist.
 
Hallo Serpil,

schau mal hier:
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Scanner;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class SimplePhoneBook extends JPanel implements ActionListener,
		ListSelectionListener {

	private JButton loadButton, saveButton, insertButton, clearButton;

	private JTextField forenameField, surnameField, telnumberField;

	private DefaultListModel model;

	public SimplePhoneBook(JFrame frame) {
		frame.setTitle("Phone Book");
		this.setLayout(new BorderLayout());

		this.add(this.createFormPanel(), "North");
		this.add(this.createListPanel(), "Center");
		this.add(this.createButtonPanel(), "South");
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setAlwaysOnTop(true);
		frame.setLocationByPlatform(true);

		frame.add(new SimplePhoneBook(frame));

		frame.pack();
		frame.setVisible(true);
	}

	public JComponent createFormPanel() {
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(0, 2));
		panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

		panel.add(new JLabel("Forename"));
		panel.add(forenameField = new JTextField(10));
		panel.add(new JLabel("Surname"));
		panel.add(surnameField = new JTextField(10));
		panel.add(new JLabel("Phone Number"));
		panel.add(telnumberField = new JTextField(10));

		return panel;
	}

	public JComponent createListPanel() {
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

		JList list = new JList(model = new DefaultListModel());
		list.addListSelectionListener(this);

		JScrollPane scrollPane = new JScrollPane(list);

		panel.add(scrollPane);

		return panel;

	}

	public JComponent createButtonPanel() {
		JPanel panel = new JPanel();
		panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

		loadButton = new JButton("Load");
		saveButton = new JButton("Save");
		insertButton = new JButton("Insert");
		clearButton = new JButton("Clear");

		loadButton.setActionCommand("laod");
		saveButton.setActionCommand("save");
		insertButton.setActionCommand("insert");
		clearButton.setActionCommand("clear");

		loadButton.addActionListener(this);
		saveButton.addActionListener(this);
		insertButton.addActionListener(this);
		clearButton.addActionListener(this);
		

		panel.add(loadButton);
		panel.add(insertButton);
		panel.add(clearButton);
		panel.add(saveButton);

		return panel;
	}

	public void insert() {
		model.addElement(forenameField.getText() + " * "
				+ surnameField.getText() + " * " + telnumberField.getText());
		forenameField.setText("");
		surnameField.setText("");
		telnumberField.setText("");
	}
	
	public void clear() {
		model.clear();
	}

	public void load() {
		Scanner scanner = null;
		try {
			scanner = new Scanner(new File("telefonbuch.dat"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

		model.clear();

		while (scanner.hasNextLine())
			model.addElement(scanner.nextLine());
	}

	public void save() {
		StringBuffer sb = new StringBuffer();

		for (int i = 0; i < model.size(); i++) {
			sb.append(model.get(i) + "\n");
		}

		try {
			FileWriter fw = new FileWriter(new File("telefonbuch.dat"));
			fw.write(sb.toString());
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void actionPerformed(ActionEvent e) {
		String s = e.getActionCommand();
		if (s.equalsIgnoreCase("laod")) {
			this.load();
		} else if (s.equalsIgnoreCase("save")) {
			this.save();
		} else if (s.equalsIgnoreCase("insert")) {
			this.insert();
		}  else if (s.equalsIgnoreCase("clear")) {
			this.clear();
		}else
			System.err.println("Else");
	}

	public void valueChanged(ListSelectionEvent e) {
		JList list = (JList) e.getSource();
		String selection = model.get(list.getSelectedIndex()).toString();
		String data[] = selection.split("\\*");
		forenameField.setText("" + data[0].trim());
		surnameField.setText("" + data[1].trim());
		telnumberField.setText("" + data[2].trim());
	}
}


Vg Erdal
 
Hallo,
ich habe da ein ähnliches Problem: Ich möchte einen Wert in meiner Properties datei aktualisieren. Aber mit der Methode save wirft er mir die Ordnung übern Haufen und die Kommenatre werden auch weggeworfen. Habe deshalb euren ansatz versucht:

Code:
			InputStream resourceAsStream = getClass().getClassLoader()
					.getResourceAsStream("RunApp.properties");
			InputStreamReader reader = new InputStreamReader(resourceAsStream);
			BufferedReader bufferedReader = new BufferedReader(reader);
			/**
			 * Initialising the output
			 */
			String newline = System.getProperty("line.separator");
			try {
				FileWriter fileWriter = new FileWriter(
						"src//main//java//RunApp.properties");
				try {
					boolean done = false;
					while (!done) {
						String sTemp = bufferedReader.readLine();
						if (sTemp == null)
							done = true;
						else {
							if (sTemp.contains("PageFormat="))// updating
								sTemp = "PageFormat=" + newFormat;
							fileWriter.write(sTemp);
							fileWriter.write("\n");// darum gehts
							fileWriter.close();
							System.out.println(sTemp);
						}
					}

Das Problem ist jetzt dass nun zwar die Reihenfolge eingehalten wird, aber dann alles in eine Zeile geschrieben wird. Ganz egal ob ich die neue Zeile mit +"\n" oder mit meiner newline Variable realisiere. Wisst ihr was das soll?

edit: Es hat doch mit dem newline separator funktioniert war freitag wohl nicht mehr ganz fit ;)
 
Zuletzt bearbeitet:
ich bin am ende mit meinem Latein...

Hat keiner ne idee wie das funktioniern kann. Ich kriegs einfach nicht hin

Gruß Serpil

also Wenn du sie erfolgreich in einem Array hast, musst Du dieses nur noch sortieren.
Dazu gibt es in der Klasse java.util.Arrays einige sort Routinen.
da sollte sicher eine Passen

viel Glück

Takidoso
 
Ok das Thema mit dem Sortieren in Properties habe ich auch schon des öfteren gehabt, bis es mir zun bund wurde und ich einfach die Properties-Klasse erweitert habe...
jedoch hat leider die Properties-Klasse den Haken das bestimmte Routinen nicht protected sind :-(. Daher muss man sich demnach das ein oder andere kopieren (ich weiß es ist nicht schön aber wenn man wenigstens etwas wiederverwenden will von dem Ding geht's wohl leider nicht anders
:eek:

Code:
package de.cmk.util;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;


public class CMKProperties extends java.util.Properties
{

	public CMKProperties()
	{
		super();
	}
	public CMKProperties(java.util.Properties defaults)
	{
		super(defaults);
	}
	
	/**
	 * Arbeitet prinzipeille genauso wie die Elternklasse jedoch werden die Properites
	 * sortiert gemäß gegebenen Comparators ausgegeben.
	 * @param out
	 * @param header
	 * @param keyComp
	 * @throws IOException
	 */
	public void store(OutputStream out, String header, Comparator keyComp)  throws IOException
    {
        BufferedWriter awriter;
        awriter = new BufferedWriter(new OutputStreamWriter(out, "8859_1"));
        if (header != null)
        {
            writeln(awriter, "#" + header);
        }
        
        writeln(awriter, "#" + new Date().toString());
        synchronized (this)  
        {        	
        	SortedSet keys = new TreeSet(keyComp); 
        	keys.addAll(keySet());
        	
        	Iterator kIter = keys.iterator();
            while(kIter.hasNext()) 
            {
                String key = (String)kIter.next();
                String val = (String)get(key);
                key = saveConvert(key, true);

	        /* No need to escape embedded and trailing spaces for value, hence
	         * pass false to flag.
	         */
                val = saveConvert(val, false);
                writeln(awriter, key + "=" + val);
            }
        }
        awriter.flush();
    }

	
	
	//----------------------------------------------------------------------------------------------------
	// Leider sind die entscheidenden Routinen private. Hätten besser protected sein sollen, 
	// dann hätte ich sie nicht kopieren müssen :-(((((((

	/**
	 * 
	 * @param bw
	 * @param s
	 * @throws IOException
	 */	
	private static void writeln(BufferedWriter bw, String s) throws IOException 
	{
        bw.write(s);
        bw.newLine();
    }
	/**
	 * @param theString
	 * @param escapeSpace
	 * @return
	 */
	private String saveConvert(String theString, boolean escapeSpace) {
        int len = theString.length();
        StringBuffer outBuffer = new StringBuffer(len*2);

        for(int x=0; x<len; x++) 
        {
            char aChar = theString.charAt(x);
            switch(aChar) 
            {
            	case ' ':
            		if (x == 0 || escapeSpace)
            		{
            			outBuffer.append('\\');
            		}

            		outBuffer.append(' ');
            		break;
                case '\\':
                	outBuffer.append('\\'); outBuffer.append('\\');
                	break;
                case '\t':
                	outBuffer.append('\\'); outBuffer.append('t');
                	break;
                case '\n':
                	outBuffer.append('\\'); outBuffer.append('n');
                	break;
                case '\r':
                	outBuffer.append('\\'); outBuffer.append('r');
                	break;
                case '\f':
                	outBuffer.append('\\'); outBuffer.append('f');
                	break;
                default:
                    if ((aChar < 0x0020) || (aChar > 0x007e)) 
                    {
                        outBuffer.append('\\');
                        outBuffer.append('u');
                        outBuffer.append(toHex((aChar >> 12) & 0xF));
                        outBuffer.append(toHex((aChar >>  8) & 0xF));
                        outBuffer.append(toHex((aChar >>  4) & 0xF));
                        outBuffer.append(toHex( aChar        & 0xF));
                    } 
                    else 
                    {
                        if (specialSaveChars.indexOf(aChar) != -1)
                            outBuffer.append('\\');
                        outBuffer.append(aChar);
                    }
            }
        }
        
        return outBuffer.toString();
    }
	
	private static char toHex(int nibble) 
	{
		return hexDigit[(nibble & 0xF)];
	}

	/** A table of hex digits */
	private static final char[] hexDigit = 
	{
		'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
	};
	    
	private static final String specialSaveChars = "=: \t\r\n\f#!";
}
 

Neue Beiträge

Zurück