# Datei in einem Unterverzeichnis erstellen



## bizzlshizzl (2. Aug 2011)

Hallo,

Ich habe erst vor wenigen Tagen mit dem Programmieren angefangen und habe mal eine Frage.

Wie kann ich eine Datei in einem Unterverzeichnis des aktuellen Verzeichnisses mit Hilfe von einem printWriter-Objekt erstellen?

Also :


```
datei = new PrintWriter (dateiname);
```

Nur, dass die Datei nicht im Verzeichnis der class-Datei landet, sondern in einem von mir bestimmten.
Danke schon im Voraus :toll:


----------



## nillehammer (2. Aug 2011)

Wenn Du den Parameter "dateiname" so angibst "meineDatei.txt" dann landet die Datei doch nicht dort, wo die Classdateien sind.


----------



## bizzlshizzl (2. Aug 2011)

Also so wie ich es gemacht habe schon.
Wenn ich den Code so benutze, wie er dort steht (ohne .txt) erstellt er mir eine Datei in dem Ordner der class-Datei.
Mit .txt, hab ich grad mal getestet, krieg ich ne Fehlermeldung vom Compiler "cannot find symbol".


----------



## nillehammer (2. Aug 2011)

```
final Writer writer = new PrintWriter("test.txt");		
writer.close();
```
Egal, von wo ich das aufrufe, test.txt wird immer in dem Verzeichnis erzeugt, wo ich gerade bin. Wie startest du Dein Programm denn? Nicht mit "java -cp /pfad/zu/classes mein.package.KlasseMitMain"?


----------



## bizzlshizzl (2. Aug 2011)

Okay. Du hast recht 
Ich bin in dem Verzeichnis meiner class-Dateien, deshalb. 
Aber das war nicht meine Frage, sondern wie ich das halt festlegen kann.


----------



## Gast2 (2. Aug 2011)

statt

```
new PrintWriter("test.txt");
```
machst du halt

```
new PrintWriter("/dein/pfad/zur/date/test.txt");
```


----------



## nillehammer (2. Aug 2011)

Oder, wenns ein Unterordner sein soll und kein absoluter Pfad

```
new PrintWriter("./mein/unterverzeichnis/test.txt");
```

Oder zwei Ordner über dem aktuellen Verzeichnis

```
new PrintWriter("../../test.txt");
```


----------



## bizzlshizzl (2. Aug 2011)

So und dann hätte ich gleich ne Folgefrage:

Wenn ich jetzt für die Ordner nicht die Namen sondern ne bestimmte Variable angeben will z.B:


```
datei = new PrintWriter("/variableA/variableB/meineDatei.txt")
```

Die Variablen natürlich verweisen auf einen String mit dem selben "Namen" wie der Ordner.


----------



## nillehammer (2. Aug 2011)

Alter, soo schwer ist das doch nicht!

```
String meinDateiName = "./pfad/zur/Datei.txt";
Writer writer = new PrintWriter(meinDateiName);
```
Oder

```
String meinPfad = "/pfad/zur/";
String meineDatei= "Datei.txt";
Writer writer = new PrintWriter(meinPfad + meineDatei);
```


----------



## bizzlshizzl (2. Aug 2011)

Nein, so meine ich das nicht.
Sondern :


```
public static void eintragAnlegen(String name)
	{
		PrintWriter datei;
		String datum;
		String termin;
		
		Scanner sc = new Scanner(System.in);
		datum = sc.next();
		
		try
		{
			datei = new PrintWriter("/name/datum.txt");
		}
		catch(FileNotFoundException e)
		{
			System.err.println("Datei konnte nicht geoeffnet werden!");
			return;
		}
```

Und in String name steht jetzt zum Beispiel Peter und in String datum 11.11.1111. Und in ner anderen Methode habe ich bereits einen Ordner erstellt mit dem Namen aus String name und nun will ich in dem Ordner eine datum(11.11.1111).txt erstellen. 
Sorry wenn ich es komplizierter mache, als es ist.


----------



## nillehammer (3. Aug 2011)

Dann bastelst Du Dir die Trenner noch zwischen die Variablennamen und die Endung hinten dran. Es ist ja nicht verboten, mehr als zwei Strings zusamenzubasteln. Dazu drei Varianten

```
// Leicht verständlich aber häßlich
String meinDateiname = name + "/" + datum + ".txt";

// Schön, aber man mus wissen wie String.format funktioniert.
// Außerdem die langsamste der drei Varianten. Aber sicher nich so
// langsam, dass es stört.
String meinDateiname = String.format("%s/%s.txt", name, datum);

// Schnell, aber man muss mit StringBuilder umgehen können
String meinDateiname = new StringBuilder(name).append("/").append(datum).append(".txt").toString();
```


----------

