# Verzeichnis erstellen!



## soa (19. Oktober 2004)

Hallo zusammen,

ich versuche es den objektorientierten Ansatz rein zu kriegen und scheitere gleich 
schon wieder bei folgender Geschichte.

Versuche mit den u.a. Methoden ein verzeichnis anzulegen:


```
import java.io.*;

public class VerzErst{
	
	
	public static void main (String args[])throws IOException{
		
	 VerzErst ausgabe = new VerzErst();	
 
   eingeben();
   eingabeStream();
   ausgabe.erstellen ();
   
  }//main
  
  public static String eingabeStream()throws IOException{
  
  BufferedReader br = new BufferedReader(
  					  new InputStreamReader(System.in));
  	
  	 String text = br.readLine();
  	 return text;
  	}//Ende eingabeStram
  	//----------------------------------------------------
  	
  	public static String eingeben()throws IOException{
  	
  	System.out.println("Bitte geben Sie den Verzeichnispfad an");	
  	System.out.println("unter dem das neue Verzeichnis erstellt werden soll:");
  	
  	VerzErst eingabe = new VerzErst();
  	String ein = eingabe.eingabeStream();
  	return ein;
  }
  
  	//-----------------------------------------------
  	
  	public static void erstellen(){
  	String verz= "";
  	try{
  	VerzErst uebergabe = new VerzErst();
  	verz = uebergabe.eingeben();		
  	File verzeichnis = new File(verz);	
  	verzeichnis.mkdirs();	
  	}
  	catch (Exception e){
  		System.out.println ( "Fehler: " +e.getMessage());
  	}	
  	}//Ende erstellen
  	
}
```

Hab da irgendwo einen Hacken drin!
Was ich vor Allem nicht weiß ist, wie ich Methoden mit Parametern ausgebe:
z.B : public static void eingeben(String eingabe)throws IOException{

Wenn ich jetzt die Methode über die main Methode aktivieren möchte muss ich wie
vorgehen?


Gruß
SOA


----------



## torsch2711 (20. Oktober 2004)

Also zu deiner letzten Frage:
Du musst einfach die Methode in die main-Methode eintragen.

Zweitens, gewöhne dir bitte an deinen Code sauber zu formatieren, da bekommt man ja augenkrebs von und gehirnverdrehungen.

Drittens, dein trage einfach nur diese codezeilen in deinen Mainteil ein:

public static void main(String args[]) {
       erstellen();
}

das langt schon, du brauchst kein Objekt vom type VerzErst anzulegen, da deine restlichen Methoden alle static sind und somit ohne ein zu initialisierendes Objekt aufgerufen werden können.
Es sind Klassenmethoden (im Unterschied zu InstanzMethoden).

Ausserdem rufst du dreimal die Eingabe auf. Ich weiss zwar nicht was Du damit bezwecken willst, aber es genügt wie gesagt nur die Methode erstellen aufzurufen, da du aus ihr eingeben() aufrufst. Allerdings auch wieder sehr seltsam.

Ein kleiner Tipp von mir: Überlege erstmal gründlich, bevor Du daran gehst und Code schreibst (bitte jetzt nicht als "üble Anmache" verstehen, ist nur ein Vorschlag, bevor so ein wirrer Codewust herauskommt).


Viele Grüsse

Torsten


----------



## soa (20. Oktober 2004)

Hallo Torsten,

vielen Dank für deine Antwort. Ich habe auch überhaupt kein Problem mit konstruktiver
Kritik, auch wenn diese möglicherweise ein wenig salopp formuliert ist.



> Zweitens, gewöhne dir bitte an deinen Code sauber zu formatieren, da bekommt man ja augenkrebs von und gehirnverdrehungen.
> .........bevor so ein wirrer Codewust herauskommt)



Wo liegen denn genau die krebserregenden Reize?  



> genügt wie gesagt nur die Methode erstellen aufzurufen, da du aus ihr eingeben() aufrufst. Allerdings auch wieder sehr seltsam.



Wie könnte ich es denn unter Verwendung der bestehenden Methoden  besser machen ?

Viele Grüsse
SOA


----------



## Vincentius (20. Oktober 2004)

Hallo soa,

ich habe Deinen Code ein bisschen korrigiert und mehr "objektorientiert" gemacht:

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

public class VerzErst {

    public static void main(String args[]) throws IOException {
        VerzErst ausgabe = new VerzErst();

        String verzeichnis = ausgabe.eingeben();
        ausgabe.erstellen(verzeichnis);
    }//main

    public String eingeben() throws IOException {
        System.out.println("Bitte geben Sie den Verzeichnispfad an");
        System.out.println("unter dem das neue Verzeichnis erstellt werden soll:");

        return eingabeStream();
    }

    //----------------------------------------------------

    public String eingabeStream() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String text = br.readLine();
        return text;
    }//Ende eingabeStram

    //-----------------------------------------------

    public void erstellen(String verz) {
        try {
            File verzeichnis = new File(verz);
            verzeichnis.mkdirs();
        } catch (Exception e) {
            System.out.println("Fehler: " + e.getMessage());
        }
    }//Ende erstellen
}
```
Dein Fehler war, alle Methoden statisch zu machen, und dabei trotzdem mit Instanzen zu arbeiten. Man sollte die beiden "Welten" nicht mischen. An Deiner Stelle würde ich erstmal mit Grundlagen der objektorientierten Programmierung anfangen. In dem Sticky Thread mit dem Namen "Linkliste / Wichtige Informationsquellen" findest Du viele gute Tutorials dazu.

Gruß
Vincent


----------



## torsch2711 (20. Oktober 2004)

Also die krebserregenden Reize liegen in der Formatierung des Codes,
der Code fliegt sozusagen hin und her. Ich bin halt eine Strukturiertere Erstellung gewöhnt, bei der mann auch beim drüberfliegen noch den Überblick behält. Zweitens gibt es auch eine Naming-Convention in Java (schön zu sehen bei den JavaDocs einer Api) (z.B. Variablen Namen immer klein, Konstanten immer gross mit _ zwischendrin etc.)


Zweitens:
Du brauchst z.B. kein Objekt von deiner klasse zu erzeugen.
Du kannst direkt die Methode erzeugen aufrufen, da du dich ja in dieser Klasse befindest und wie ich schon erwähnte es sich bei deiner erzeugen um eine Statische Methode handelt. Sprich es ist ein Klassenmethode, welche keinerlei bedarf der Erzeugung einer Instanz dieser Klasse braucht.

Wenn Du eine IDE wie z.B. Eclipse verwendest, würde Eclipse das als Bemerkung anbringen. Dort heisst es dann übersetzt: Diese Methode ist eine Statische Methode, welche am besten über einen statischen zugriff (sprich von aussen mit VerzErst.erzeugen() aufgerufen wird, ohne vorher eine Instanz zu erzeugen (VerzErst test=new VerzErst()));

Sop. Ich denke das war es erstmal.

Ein kleiner Vorschlag, wir alle haben mal angefangen, lies erstmal ein kleines Buch über Java und versuche den Objekt-Orientierten Programmierweg so zu verstehen und parallel die ersten Schritte zu wagen. Das hilft ungemein, so war wenigstens mein Werdegang und wie gesagt, ich war auch nicht immer der Vorzeige-bube im Code-Formatieren in der Vergangenheit (es war teilweise wirklich schrecklich), aber es erleichtert die Arbeit ungemein.

Ich hoffe ich konnte Dir helfen.

Viele Grüsse

Torsten.

P.S.: Funktioniert dein Programm eigentlich jetzt, oder haste es noch nicht ausprobiert.


----------



## torsch2711 (20. Oktober 2004)

Vincentius hat gesagt.:
			
		

> Hallo soa,
> 
> ich habe Deinen Code ein bisschen korrigiert und mehr "objektorientiert" gemacht:
> 
> ...




Hatte ich ihm ja auch gesagt, wie ich schon vorher sagte, er soll sich erst einmal in das Konzept der OO-Programmierung einlesen und es versuchen zu verstehen. Dann kommen solche Fehler auch nicht mehr vor


----------



## soa (20. Oktober 2004)

Hallo,

super Klasse! Vielen Dank! Ein Buch habe ich schon. Ich programmiere also nicht einfach drauf los. Ich habe Java in 21 Tagen von Mark und technik. Das ist nicht schlecht.
Trotzdem ist der Austausch in einem Forum manchmal nicht zu ersetzen  

Das Programm läuft auf jeden Fall. Mit Eclipse möchte ich noch nicht arbeiten, da der
editor zuviel mithilft. Das ist am Anfang wohl eher von Nachteil. benutze also weiter 
mein textpad.....

Vielen Dank für die Tipps. Habe jetzt ja auch ein prima beispiel wie man es richtig macht  

SOA


----------



## Longor1996 (21. Mai 2011)

Es geht glaub ich, noch leichter 


```
static void createFolder(File f)
	{
		if(f.exists())
		{}
		else
		{
			f.mkdir();
		}
	}
```


----------

