Property- Keys und Values mit Tab getrennt

Hallo,
ich versuche seit längerer Zeit vergebens, alle Property-Werte aus einer .property-Datei erst einzulesen, und dann die Keys und Values mit einem Tabstop von einander getrennt in eine .xlsx-Datei auszuleiten. Ich wollte dies so umsetzen, dass eine einfache .txt datei erzeugt wird und dort Key + Value mit einem Tabstop getrennt sind, dies kann man danach einfach in Excel kopieren.

Ich habe mehrere Möglichkeiten gefunden, alle Werte nacheinander auszugeben. Zudem gibt es die Möglichkeit, fest definierte Keys und Values voneinander zu trennen und auszugeben, jedoch ist das nicht möglich, da sich die .properties-Datei immer wieder verändern wird und somit eine Lösung benötigt wird, dass


Bei mir wird momentan die komplette Konsolenausgabe als .txt geloggt, somit muss ich nur noch die Ausgabe abändern, sodass die Gleichheitszeichen mit einem \t ausgetauscht werden. (Sorry für diese unsaubere Beschreibung...).

Beispiel:
aktuelle Ausgabe: database=test
Soll-Ausgabe: database \t test


Kennt ihr eine Möglichkeit, anstelle von den "="-Zeichen einen Tabstop (\t) zu verwenden? Es ist auch komplett egal, wie unsauber der Code ist/wäre, ich möchte nur endlich eine Lösung finden, ich bin echt am verzweifeln...

mein Code sieht wiefolgt aus:
Java:
package com.jetbrains;


import java.io.*;
import java.util.Properties;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        logtotxt.main(args);

        Properties pro = new Properties();
        Writer writer = null;
        Reader reader = null;
        try {
            reader = new FileReader("test.properties");

            Properties prop1 = new Properties();
            prop1.load(reader);

            Properties prop = new Properties(System.getProperties());
            prop1.list(System.out);

            writer = new FileWriter("h:/TEMP/properties.txt");
            prop1.store(writer, "Kommentar");

        }
        catch ( IOException e )
        {
            e.printStackTrace();
        }
        finally
        {
            try { writer.close(); } catch ( Exception e ) { }
            try { reader.close(); } catch ( Exception e ) { }
        }
    }
}
 
Also ich verstehe Deinen Code nicht, denn du holst Dir z.B. die System-Properties ohne irgend etwas damit zu machen ...

Aber wenn Du Properties hast und Du willst alle Properties durchgehen, dann kannst Du Properties.propertyNames() nutzen um eine enumerartion zu bekomen. Diese Enumeration kannst Du dann durchgehen um mit den einzelnen Werten zu machen, was immer Du willst.
 
Moin,

bin mir zwar sicher, ob ich wirklich verstanden habe, was Du möchtest, aber versuch mal den Befehl "replace" !
Du solltest dann dabei das tabulatorzeichen auch excapen, also "\\t" statt "\t" !

Gruß Klaus
 
Das, was ich mir so vorgestellt habe (über Properties) wäre halt etwas wie
Code:
import java.io.*;
import java.util.Enumeration;
import java.util.Properties;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        Writer writer = null;
        Reader reader = null;
        try {
            reader = new FileReader("test.properties");
            writer = new FileWriter("h:/TEMP/properties.txt");

            Properties prop1 = new Properties();
            prop1.load(reader);
            Enumeration enumeration = prop1.propertyNames();
            while (enumeration.hasMoreElements()) {
                String key = (String) enumeration.nextElement();
                String value = (String) prop1.get(key);
                writer.write(key + " \t " + value + "\n");
            }
        }
        catch ( IOException e )
        {
            e.printStackTrace();
        }
        finally
        {
            try { writer.close(); } catch ( Exception e ) { }
            try { reader.close(); } catch ( Exception e ) { }
        }
    }
}
 
Da es sich bei den Properties um ein "set of properties" handelt, ist es ohne Reihenfolge. Über den Weg mit den Properties wirst Du das so nicht lösen können.
 
Ich mal wieder...
Mir ist aufgefallen, dass es immer wieder Fehler im Key gibt: Wenn im Key ein Leerzeichen vorhanden ist, wird dies als "=" verarbeitet, also alles nachfolgende wird als Value verarbeitet. Ich habe versucht, eine andere Methode zum einlesen zu verwenden, doch es kommt der gleiche Fehler auf.
Ich habe die Vermutung, dass dies an der Enumeration liegt?

Beispiel: DiesIstderTest Key=Beispiel-Value
Verarbeitung: DiesIstDerTest = Key=Beispiel-Value
Key Value
 
Wozu überhaupt der Umweg über die Properties? Liest die Datei ein, ersetze alle = durch ein TAB und gut ist. Aber selbst das ist total unnötig, denn in Excel kann man beim CSV Import das Trennzeichen auch selber wählen und da brauchst du nur das = nehmen,

Gruß

Claus
 
oke, habe mir einen Workaround gebastelt, wenn man die Leerzeichen durch \u0200 ersetzt, funktioniert es und in der Ausgabe wird das automatisch wieder umgewandelt 🙂
 

Zurück
Oben