# Objektnamen dynamisch erzeugen



## bob134 (24. Oktober 2006)

Guten Tag!

Ich weiß es gibt schon einen Thread mit selbigem Titel, aber irgendwie blick ich´s nicht!

Ich möchte in einer Schleife 142 Dateien + zugehörige FileWriter erstellen.

Dabei soll der Dateiname und das FileWriter obj fast gleich heißen.
Bsp.:

String filename = "datei" + x + "ordner" + y;

File file = new File(filename);

FileWriter "fwDatei + x + ordner + y";

x++;
y++;

leider kann man den FileWriter so nicht erstellen...

Wie kriege ich dies Problem gelöst?

Danke


----------



## zeja (24. Oktober 2006)

In dem alten Thread stehts doch geschrieben:


Christian Fein hat gesagt.:


> Nutze eine List in der du deine Objecte speicherst.
> 
> So sind sie Anonym, denn dynamische Benennung funktioniert nicht, da
> der compiler mit sowas nicht umgehen kann.



Was du machen kannst ist folgendes:

```
HashMap<String,FileWriter> writers = new HashMap<String,FileWriter>();
for(int i = 0; i < 142; i++){
   String filename = "datei" + x + "ordner" + y;

   File file = new File(filename);
   FileWriter writer = new FileWriter(file);
   writers.put("fwDatei" + x + "ordner" + y, writer);

   x++;
   y++;
}
```

Dann kannst du die FileWriter anhand des Namens wieder aus der HashMap rausholen.


----------



## bob134 (24. Oktober 2006)

Das nenn ich mal Service!
 Vielen Dank, jetzt versteh ich´s auch!


----------



## Neuling1 (3. November 2006)

Ich hab hier so ein ähnliches Problem. Und zwar beim FileWriter, oder auch beim File festlegen eigentlich. Ich kann mir auch schon denken wo mein Problem, nur stehe ich da jetzt voll auf dem Schlauch. 


```
public class Person {

	// Eigenschaften
	private 
	String vname, nname, alter1,datei1=vname+nname+".txt";
	int alter;
	//File datei = new File(datei1);
	

	InputStreamReader ein = new InputStreamReader(System.in);
	BufferedReader lese = new BufferedReader(ein);
	FileWriter speicher = new FileWriter(this.datei1);
	PrintWriter ausgabe = new PrintWriter(speicher);

	// Konstruktoren

	Person() throws IOException{
		this.vname = "Jochen";
		this.nname = "Wolfrum";
		this.alter = 0;
		}

	Person(String a, String b)throws IOException {
		this();
		this.vname = a;
		this.nname = b;
		}

	Person(String a, String b, int c)throws IOException {
		this(a, b);
		this.alter = c;
		}
	
	
	void msetName(String a, String b) {
		this.vname = a;
		this.nname = b;
	
	}
	void msetAlter(int a) {
		alter = a;
		}

	void msetDaten()throws IOException {
			
		
			//System.out.println("Bitte Dateiname eingeben: ");
			//this.datei1 = lese.readLine();
			System.out.println("Bitte Vornamen eingeben: ");
			this.vname = lese.readLine();
			System.out.println("Bitte Nachnamen eingeben: ");
			this.nname = lese.readLine();
			System.out.println(datei1);
			System.out.println("Bitte Alter eingeben: ");
			this.alter1 = lese.readLine();
			alter = Integer.parseInt(alter1);
		}
```

Mein txt- Datei heißt jetzt NullNull..was denke ich , daran liegt das schon vorher irgendwo was festgelegt wird. Ich hab nur echte Probleme den Dateinamen so festzulegen. Egal ob mit Tastatureingabe oder aus dem Programmablauf entstehend. Ich weiss hier echt nicht mehr weiter.


----------



## zeja (3. November 2006)

String vname, nname, alter1,datei1=vname+nname+".txt";

vname und nname sind zu Beginn ja noch null.

Und datei1 wird ja fest auf die Verküpfung von vname und nname gesetzt, daher ergibt das nullnull.txt

datei1 musst du also neu initialisiern wenn sich vname/nname geändert haben.


----------



## Neuling1 (3. November 2006)

zum beispiel mit datei1 []array, wo ich dann immer wieder initialisieren kann. Wenigstens hast du jetzt das problem in meinem Kopf in Worte verpackt. Dachte mir das es sowas ist, konnte es nur net auf den Punkt bringen. aber wo initialisiere ich es am besten neu?


----------



## zeja (3. November 2006)

Mach dir einfach eine Methode getFileName die dir dann vname+nname+".txt" zurückgibt.

Dann legst du den dateinamen nicht mehr fest an und immer wenn du die Datei brauchst kannst du dir mit getFileName den passenden Dateinamen holen.


----------

