Abfrage von Dateien in der Konsole mit anschließenden generieren der Daten

GreennoisOn

Mitglied
Hallo,

ich würde gerne in der Konsole Daten abfragen lassen z.B Vorname, Nachname, Adresse, Tel.
Diese Dateien sollen dann zu einer vcf Datei generiert werden und abgespeichert werden.
Hat jemand einen passenden Code für mich?

Vielen Dank im voraus.
 

youza

Erfahrenes Mitglied
Ich weiß jetzt nicht genau wie eine vcf formatierte werden muss aber als Ansatz sollte folgender Code auf jeden Fall reichen:
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;


public class Test_Something {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		schreiben(baueMensch(),"test.vcf");

	}
	private static String[] baueMensch(){
		String vorname = null;
		// oder
		String nachname = "";
		int abschluss = 0;
		
		int count = 0;
		do{
		  try {
			  BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

		     System.out.print("Vorname : ");
		                    vorname = console.readLine();
		                    
		     System.out.print("Nachname : ");
             				nachname = console.readLine();
             				
		     System.out.print("Abschluss : ");
		     				abschluss = Integer.parseInt(console.readLine());
		     count = 3;
		  } catch (Exception ex) {
		    System.out.println("Fehlereingabe");
		    count++;
		    if(count == 3)
		    {
		    	System.out.println("Dreimal Falsch eingegeben damit bist du der Depp des Jahres servus!");
		    	return null;
		    }
		  }
		}while (count < 3);
		String[] output = new String[3];
		output[0] = "Vorname:\t"+vorname;
		output[1] = "Nachname:\t"+nachname;
		output[2] = "bschluss:\t"+abschluss;		
		return output;
	}
	public static void schreiben(String output[],String zielDatei) {
		// File anlegen
		File file = new File(zielDatei);
		FileWriter writer;
		try {
			// new FileWriter(file ,true) - falls die Datei bereits existiert
			// werden die Bytes an das Ende der Datei geschrieben
			// new FileWriter(file) - falls die Datei bereits existiert
			// wird diese überschrieben
			writer = new FileWriter(file, true);

			for (int i = 0; i < output.length; i++) {
				// Text wird in den Stream geschrieben
				writer.write(output[i]);

				// Platformunabhängiger Zeilenumbruch wird in den Stream
				// geschrieben
				writer.write(System.getProperty("line.separator"));

				// Schreibt den Stream in die Datei
				// Sollte immer am Ende ausgeführt werden, sodass der Stream
				// leer ist und alles in der Datei steht.
				writer.flush();
			}
			// Schließt den Stream
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Hab es jetzt mal ausprobiert mit einer vcf da musst du die funktion schreiben wie folgt umschreiben:
Java:
public static void schreiben(String output[],String zielDatei) {
		File file = new File(zielDatei);
		FileWriter writer;
		try {
			writer = new FileWriter(file, true);
			writer.write("BEGIN:VCARD");
			writer.write(System.getProperty("line.separator"));
			writer.write("VERSION:3.0");
			writer.write(System.getProperty("line.separator"));
			writer.write("N:"+output[1]+";"+output[0]);
			writer.write(System.getProperty("line.separator"));
			writer.write("FN:"+output[0]+" "+output[1]);
			writer.write(System.getProperty("line.separator"));
			writer.write("ORG:Your Company");
			writer.write(System.getProperty("line.separator"));
			writer.write("URL:www.google.de");
			writer.write(System.getProperty("line.separator"));
			writer.write("EMAIL;TYPE=INTERNET:"+output[0]+"."+output[1]+"@example.org");
			writer.write(System.getProperty("line.separator"));
			writer.write("END:VCARD");
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

GreennoisOn

Mitglied
Damit erstellt er zwar eine vcf Datei, dennoch ist diese dann nicht im richtigen Format. . In der Datei die man mit diesem Quellcode anlegt ist "nur" der Inhalt den ich brauche.
Nur in diesem Format kann man die Datei mit Windows Kontakte oder Outlook öffnen:

BEGIN:VCARD
VERSION:3.0
N:Mustermann;Max
FN:Max Mustermann
ORG:Wikipedia
URL:http://de.wikipedia.org/
EMAIL;TYPE=INTERNET:max.mustermann@example.org
TEL;TYPE=voice,work,pref:+49 1234 56788
ADR;TYPE=intl,work,postal,parcel:;;Musterstraße 1;Musterstadt;;12345;Germany
END:VCARD

Ich weiß absolut nicht wie man sowas macht, kann da jemand weiterhelfen?

Genau das habe ich gesucht, vielen Dank. :)
 

youza

Erfahrenes Mitglied
Konnte des jetzt nicht so stehen Lassen hier nochmal ordentlich:

alles in einem package: (org.youza.test)
Main in der Klasse Starting:
Java:
package org.youza.test;

public class Starting {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BuildvCard buildvCard = new BuildvCard();
		vCard vcard = buildvCard.newvCard();
		if(buildvCard.schreiben(vcard, "test.vcf"))
			System.out.println("succesful");
	}

}
Objekt vCard um die Werte zu speichern:
Java:
package org.youza.test;

public class vCard {

	private String Vorname;
	private String Nachname;
	private String Organisation;
	private String URL;
	private String E_mail;
	private String Telefon;
	private String Addresse;
	public String getVorname() {
		return Vorname;
	}
	public void setVorname(String vorname) {
		Vorname = vorname;
	}
	public String getNachname() {
		return Nachname;
	}
	public void setNachname(String nachname) {
		Nachname = nachname;
	}
	public String getOrganisation() {
		return Organisation;
	}
	public void setOrganisation(String organisation) {
		Organisation = organisation;
	}
	public String getURL() {
		return URL;
	}
	public void setURL(String uRL) {
		URL = uRL;
	}
	public String getE_mail() {
		return E_mail;
	}
	public void setE_mail(String e_mail) {
		E_mail = e_mail;
	}
	public String getTelefon() {
		return Telefon;
	}
	public void setTelefon(String telefon) {
		Telefon = telefon;
	}
	public String getAddresse() {
		return Addresse;
	}
	public void setAddresse(String addresse) {
		Addresse = addresse;
	}
	

}
Klasse BuildvCard für die Funktionen:
Java:
package org.youza.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class BuildvCard {

	public vCard newvCard(){
		vCard vcard = new vCard();
		int count = 0;
		do{
		  try {
			  BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

		     System.out.print("Vorname : ");
		     vcard.setVorname(console.readLine());		                    
		     System.out.print("Nachname : ");
		     vcard.setNachname(console.readLine());             				
		     System.out.print("E-mail : ");
		     vcard.setE_mail(console.readLine());
		     System.out.print("Adresse : ");
			 vcard.setAddresse(console.readLine());
			 System.out.print("Organisation : ");
			 vcard.setOrganisation(console.readLine());
		     System.out.print("Telefon : ");
		     vcard.setTelefon(console.readLine());
		     count = 3;
		  } catch (Exception ex) {
		    System.out.println("Fehlereingabe");
		    count++;
		    if(count == 3)
		    {
		    	System.out.println("Dreimal Falsch eingegeben damit bist du der Depp des Jahres servus!");
		    	return null;
		    }
		  }
		}while (count < 3);
		
		return vcard;
	}
	public boolean schreiben(vCard vcard,String zielDatei) {
		File file = new File(zielDatei);
		FileWriter writer;
		try {
			writer = new FileWriter(file, true);
			writer.write("BEGIN:VCARD");
			writer.write(System.getProperty("line.separator"));
			writer.write("VERSION:3.0");
			writer.write(System.getProperty("line.separator"));
			writer.write("N:"+vcard.getNachname()+";"+vcard.getVorname());
			writer.write(System.getProperty("line.separator"));
			writer.write("FN:"+vcard.getVorname()+" "+vcard.getNachname());
			writer.write(System.getProperty("line.separator"));
			writer.write("ORG:"+vcard.getOrganisation());
			writer.write(System.getProperty("line.separator"));
			writer.write("URL:"+vcard.getURL());
			writer.write(System.getProperty("line.separator"));
			writer.write("EMAIL;TYPE=INTERNET:"+vcard.getE_mail());							
			writer.write(System.getProperty("line.separator"));
			writer.write("TEL;TYPE=voice,work,pref:"+vcard.getTelefon()+":");
			writer.write(System.getProperty("line.separator"));
			writer.write("ADR;TYPE=intl,work,postal,parcel:;;"+vcard.getAddresse()+":");
			writer.write(System.getProperty("line.separator"));
			writer.write("END:VCARD");
			writer.close();
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}

}

so solltest du es am besten machen ist ordentlicher als mit einem String Array
:)
 

GreennoisOn

Mitglied
Danke schon einmal, ich weiß nur leider nicht wie man das mit einem Package macht, kannst du dazu vielleicht die einzelnen Schritte schreiben. Bin ein absoluter Java Anfänger.
 

youza

Erfahrenes Mitglied
ok dann würde ich dir als erstes mal empfehlen eine IDE zu installieren
http://www.eclipse.org/downloads/
Hier Eclipse Classic 4.2.1
entpacken und starten das JDK hast du ja augenscheinlich schon installiert
Sobald Eclipse startet kannst du hier ein neues Java Projekt erstellen dieses Java Projekt erstellt die schon eine gewisse Struktur mit Rechtsklick auf src kannst du dann ein package erstellen unter welchem du wieder Klassen anlegen kannst und so weiter...
http://www.hackerboard.de/tutorials...e-eclipse-ide-tutorial-fuer-erstbenutzer.html

Achja wichtig wird für dich auch noch die Insel:
http://openbook.galileocomputing.de/javainsel/
in der Insel ist auch nochmal alles zu Eclipse:
http://openbook.galileocomputing.de...tml#dodtp95ecc9a1-2ac1-4a0a-b79b-7d0753937853
 

GreennoisOn

Mitglied
Mit Eclipse klappt das alles super, danke dir.

Hat jemand eine wie man das ganze besser strukturieren könnte bzw. die Architektur verändern könnte damit es nur 2 Klassen in dem Package sind. Also das man vielleicht anfängt mit Starting, welches hinzu aber gleich die Werte abfragt. Die 2 Klasse würde ich VCardFormat nennen wo get/set und der writing Teil drin enthalten ist.
 

GreennoisOn

Mitglied
Kurz: Ich bin Praktikant und habe diese Aufgabe bekommen.:D Mir wurde gesagt das die Architektur noch nicht gut ist. Damit wird gemeint das man in diesen Klassen nicht das erwarten würde, was auch wirklich drin steht. Dazu könnte man es wohl noch kürzer fassen. Deswegen sollte ich es so verändern wie ich es in dem anderen Post geschrieben habe.
 

youza

Erfahrenes Mitglied
Du kannst natürlich die funktionen in die Objekt-Klasse mit einbauen:
Java:
package org.youza.test;


import org.youza.dto.vCard;

public class Starting {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		vCard vcard = new vCard();
		vcard.newvCard();
		if(vcard.writing("bla.vcf"))
			System.out.println("passt!");
	}
}
Objekt vCard:
Java:
package org.youza.dto;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class vCard {

	private String Vorname;
	private String Nachname;
	private String Organisation;
	private String URL;
	private String E_mail;
	private String Telefon;
	private String Addresse;
	public String getVorname() {
		return Vorname;
	}
	public void setVorname(String vorname) {
		Vorname = vorname;
	}
	public String getNachname() {
		return Nachname;
	}
	public void setNachname(String nachname) {
		Nachname = nachname;
	}
	public String getOrganisation() {
		return Organisation;
	}
	public void setOrganisation(String organisation) {
		Organisation = organisation;
	}
	public String getURL() {
		return URL;
	}
	public void setURL(String uRL) {
		URL = uRL;
	}
	public String getE_mail() {
		return E_mail;
	}
	public void setE_mail(String e_mail) {
		E_mail = e_mail;
	}
	public String getTelefon() {
		return Telefon;
	}
	public void setTelefon(String telefon) {
		Telefon = telefon;
	}
	public String getAddresse() {
		return Addresse;
	}
	public void setAddresse(String addresse) {
		Addresse = addresse;
	}
	public boolean writing(String zielDatei) {
		File file = new File(zielDatei);
		FileWriter writer;
		try {
			writer = new FileWriter(file, true);
			writer.write("BEGIN:VCARD");
			writer.write(System.getProperty("line.separator"));
			writer.write("VERSION:3.0");
			writer.write(System.getProperty("line.separator"));
			writer.write("N:"+this.getNachname()+";"+this.getVorname());
			writer.write(System.getProperty("line.separator"));
			writer.write("FN:"+this.getVorname()+" "+this.getNachname());
			writer.write(System.getProperty("line.separator"));
			writer.write("ORG:"+this.getOrganisation());
			writer.write(System.getProperty("line.separator"));
			writer.write("URL:"+this.getURL());
			writer.write(System.getProperty("line.separator"));
			writer.write("EMAIL;TYPE=INTERNET:"+this.getE_mail());							
			writer.write(System.getProperty("line.separator"));
			writer.write("TEL;TYPE=voice,work,pref:"+this.getTelefon()+":");
			writer.write(System.getProperty("line.separator"));
			writer.write("ADR;TYPE=intl,work,postal,parcel:;;"+this.getAddresse()+":");
			writer.write(System.getProperty("line.separator"));
			writer.write("END:VCARD");
			writer.close();
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}
	public void newvCard(){
		int count = 0;
		do{
		  try {
			  BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

		     System.out.print("Vorname : ");
		     this.setVorname(console.readLine());		                    
		     System.out.print("Nachname : ");
		     this.setNachname(console.readLine());             				
		     System.out.print("E-mail : ");
		     this.setE_mail(console.readLine());
		     System.out.print("Adresse : ");
			 this.setAddresse(console.readLine());
			 System.out.print("Organisation : ");
			 this.setOrganisation(console.readLine());
		     System.out.print("Telefon : ");
		     this.setTelefon(console.readLine());
		     count = 3;
		  } catch (Exception ex) {
		    System.out.println("Fehlereingabe");
		    count++;
		    if(count == 3)
		    {
		    	System.out.println("Dreimal Falsch eingegeben damit bist du der Depp des Jahres servus!");
		    }
		  }
		}while (count < 3);
	}
}

Die logik sollte auch von dem Objekt in einem getrennten Package sein vielleicht gefällt es deinem Chef so besser ;)