Speichern einer Textdatei

IbeA

Grünschnabel
Hallo,

Ich habe folgendes Problem.
Ich soll folgende Strings in eine Textdatei speichern: Ländercode, Datum (vom Benutzer eingegeben dueDate) Beschreibung (description auch vom Benutzer eingegeben) und den Medientyp (Mediatype wird angeklickt). Getrennt sollen diese alle duch Tabstopps.
Wie kann ich am besten eine Funktion schreiben, die die Eingaben in dieser Reihenfolge speichert?
 
Am Besten befragst Du Deine Suchmaschine nach "CSV" (Comma Seperated Values). Hier ein kleines Beispiel. Du kannst den PrintWriter auch auf eine Datei zeigen lassen:

Java:
    private static final String join(final String[] parts, final char c) {
        final int iMax = parts.length - 1;
        if (iMax == -1) {
            return "";
        }
        final StringBuilder sb = new StringBuilder();
        for (int i = 0;; i++) {
            final String part = parts[i].replace(c, ' '); // works if c != ' '
            sb.append(part);
            if (i == iMax) {
                break;
            }
            sb.append(c);
        }
        return sb.toString();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        final List<String[]> datas = new ArrayList<String[]>();
        datas.add(new String[] { "DE", "2012-03-06", "CD", ">>> Beschreibung <<<" });
        datas.add(new String[] { "AT", "2012-03-05", "MP3", "Test" });
        PrintWriter csv = null;
        try {
            csv = new PrintWriter(System.out);
            final char seperator = '\t';
            for (final String[] data : datas) {
                final String line = join(data, seperator);
                csv.println(line);
            }
        } catch (final Exception e) {
            e.printStackTrace();
        } finally {
            if (csv != null) {
                csv.close();
            }
        }
    }

Eine Überlegung Die Du machen musst ist, was passiert wenn dein Trennzeichen (Tabstopp) im Wert (zB Beschreibung) vorkommt. Eine Möglichkeit wäre, die Beschreibung als letzten Wert zu speichern. Dann weißt Du zB, dass jeder Tabstopp nach dem Beginn der Beschreibung Teil der Beschreibung selbst ist.
 
Zuletzt bearbeitet von einem Moderator:
Ooooh :) danke!
Nun habe ich nur noch ein paar Fragen:
1. was ist die Variable iMax? Ist das der Inhalt?
2.warum brauche ich das final char c?
3. wenn ich schon eine Liste creirt habe (für das Laden), wie kann ich die dann dort mit einbauen, oder brauche ich eine neue Liste?
Wenn ich die einfach so weiterbenutzen kann, wie geht das? geht nämlich nicht mit .instance... zumindest nicht bei data : datas (in meinem Fall dann der Name der Liste)


Danke schonmal!!
Gruß
IbeA
 
Zuletzt bearbeitet:
Hellas!

iMax ist der maximal Index vom parts-Array. Mit der Logik soll verhindert werden, dass an den letzten Eintrag kein Seperator (char c) angehängt wird. Wenn Du eine einfache for-Schleife nimmst:

Java:
    private static final String join(final String[] parts, final char c) {
        final StringBuilder sb = new StringBuilder();
        for (int i = 0; i < parts.length; i++) {
            final String part = parts[i].replace(c, ' '); // works if c != ' '
            sb.append(part);
            sb.append(c);
        }
        return sb.toString();
    }

Und Du setzt das seperator-Zeichen auf einen Beistrich:

Java:
final char seperator = ',';

Bekommst Du folgende Ausgabe:

Code:
DE,2012-03-06,CD,>>> Beschreibung <<<,
AT,2012-03-05,MP3,Test,

Das "final char c" ist dein Seperator also "Feldtrennzeichen". In deinem Fall der Tabstopp, Du kannst aber jedes beliebige Zeichen verwenden (zB Beistrich, etc.). Bei einem Zeilenumbruch bekommst Du natürlich Probleme.

Wenn Du eine bestehende Datei hast und dort nur Einträge hinzufügen möchtest, kannst Du einen FileWriter mit dem Paramater "append=true" verwenden:

Java:
csv = new PrintWriter(new FileWriter("test.txt", true));

Dann wird Deine bestehende Datei nicht gelöscht, sondern nur hinzugefügt.

Zum Laden der Daten aus einer bestehenden Datei musst Du die Datei zeilenweise einlesen und jede Zeile einzeln verarbeiten.
 
Zuletzt bearbeitet von einem Moderator:
Zurück