# Ausgabe eines Root-Verzeichnis nach Eingabe über Konsole



## ninonar (10. Apr 2021)

Hallo!
(Smiley bei Aufgabe)

Leider bin ich nicht besonders begabt im Programmieren mit Java und stehe vor der ersten Aufgabe eines neuen Moduls aus meinem Studium... und leider war unser Professor auch letztes Semester nicht besonders hilfsbereit und man stand ziemlich allein da mit den Aufgaben. Dieses mal habe ich jedoch keine Hilfestellung o.ä., da ich die ersten Aufgaben aus privaten Gründen vorarbeiten muss, weil ich die nächsten zwei Wochen kaum Zeit haben werde...
Wäre toll, wenn sich jemand Zeit nehmen könnte oder vielleicht irgendeinen Ansatz wüsste, die Aufgabe zu lösen.

Die Aufgabe lautet:
Gegeben ist die folgende Methode zur Darstellung einer Verzeichnisstruktur:


> public void listDir(File dir) {
> File[] files = dir.listFiles();
> if (files != null) {
> for (int i = 0; i < files.length; i++) {
> ...



Der Methode wird beim Aufruf ein File-Objekt der Klasse File übergeben. Dieses kann wie folgt erstellt werden:


> _String rootVerzeichnis = "C://tmp/test";
> File fileObjekt = new File(rootVerzeichnis);_



__Entwickeln Sie mit Eclipse eine Java Konsolapplikation, bei der der Benutzer zunächst ein Root-Verzeichnis als String über die Tastatur eingibt. Danach sollen die im Root-Verzeichnis enthaltenen Dateien und Unterverzeichnisse auf dem Bildschirm ausgegeben werden.


Etwas als einen String in die Konsole eingegeben werden soll, schaffe ich. Aber wie soll man die Eingabe so erstellen, dass Java sie als ein Verzeichnis erkennt? Und wie muss ich das dann mit der Methode oben verknüpfen?
Beziehungsweise verstehe ich hier einfach gar nichts und schaffe es nicht, die ganzen Sachen im Kopf zusammen zu kriegen geschweige denn anzuwenden. Kann mir jemand einen Denkanstoß geben, wie ich vorgehen könnte? Es wäre schon hilfreich einfach eine Struktur im Kopf zu haben, mit der man arbeiten kann...
Sitze schon seit ein paar Tagen vor Eclipse und verzweifle langsam

Vielen Dank schonmal!
LG
Nora


----------



## kneitzel (10. Apr 2021)

Du hast in der Methode doch schon den Typ des Parameters (File). Schau Dir doch einfach einmal die Dokumentation der Klasse an - vielleicht findest Du dann ja einen Weg, wie Du aus einem String eine neue Instanz von File bekommst.


----------



## sascha-sphw (10. Apr 2021)

Du hast es doch sogar selbst im Post stehen. Und Du sagst, wie man einen String vom Nutzer einliest weißt Du. Dann musst Du das doch nur noch verbinden.

```
String rootVerzeichnis = "C://tmp/test";
File fileObjekt = new File(rootVerzeichnis);
```


----------



## mihe7 (11. Apr 2021)

ninonar hat gesagt.:


> Etwas als einen String in die Konsole eingegeben werden soll, schaffe ich. Aber wie soll man die Eingabe so erstellen, dass Java sie als ein Verzeichnis erkennt? Und wie muss ich das dann mit der Methode oben verknüpfen?
> Beziehungsweise verstehe ich hier einfach gar nichts und schaffe es nicht, die ganzen Sachen im Kopf zusammen zu kriegen geschweige denn anzuwenden. Kann mir jemand einen Denkanstoß geben, wie ich vorgehen könnte? Es wäre schon hilfreich einfach eine Struktur im Kopf zu haben, mit der man arbeiten kann...
> Sitze schon seit ein paar Tagen vor Eclipse und verzweifle langsam


Ei, ei, ei, da weiß man ja gar nicht, wo man anfangen soll...

Grundsätzlich kannst Du Dir mal merken:

1. Du brauchst eine Klasse
2. Zur Ausführung brauchst Du eine main-Methode (deklariert nach festen Regeln).
3. Der Code wird schrittweise ausgeführt, beginnend in der main-Methode.

Dann muss klar sein, dass die Methode listDir eine Objektmethode ist, also nur im Kontext eines Objekts ausgeführt werden kann. D. h. Du musst von der Klasse, die die Methode enthält (das kann auch Deine sein) ein Objekt erzeugen.

Naja, und der Rest steht ja eigentlich sowieso schon da.


----------



## 123neu (11. Apr 2021)

Die Vorgabe ist sehr schlecht:


```
import java.io.File;

public class Aufgabe {
    public void listDir(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                System.out.print(files.getAbsolutePath());
                if (files.isDirectory()) {
                    System.out.print(" (Ordner)\n");
                    listDir(files); // ruft sich selbst mit dem
                    // Unterverzeichnis als Parameter auf
                } else {
                    System.out.print(" (Datei)\n");
                }
            }
        }
    }

    public static void main(String[] args) {
        String rootVerzeichnis = "C://tmp/test";
        File fileObjekt = new File(rootVerzeichnis);
        
    }
}
```

Da fehlen `[i]`s, außerdem werden Pfade in Windows normalerweise mit Backslash ( \ ) getrennt, nicht mit zwei // ...

Jetzt zu deiner Frage. Wenn du alles schon weißt, wie man eine Zeile einlesen kann, dann sollte es ein Leichtes für dich sein, mit etwas Transferleistung eine Methode richtig aufzurufen.


----------



## kneitzel (11. Apr 2021)

Da die Schrift kursiv wird, gehe ich davon aus, dass die Vorgabe schon korrekt war. Auch die fehlende Einrückung deutet auf ein nachträgliches setzen der Code Tags hin ....


----------



## sascha-sphw (11. Apr 2021)

123neu hat gesagt.:


> außerdem werden Pfade in Windows normalerweise mit Backslash ( \ ) getrennt, nicht mit zwei // ...


Normalerweise programmiert man in Java Plattformunabhängig.


----------



## 123neu (11. Apr 2021)

jo dann darf er auch keinen absoluten Pfad vorgeben ...

Die Vorgabe ist grottenschlecht, in der Schule noch verzeihlich, an der Uni aber nicht mehr...


----------



## ninonar (12. Apr 2021)

Für die Vorgabe kann ich nichts  
Also ich habe es geschafft, dass ich die Verzeichnisse aufgelistet bekomme, funktioniert also soweit. Jetzt komme ich aber wiederum an dem Punkt nicht wirklich weiter, dass ich ja das Root-Verzeichnis, was ausgelesen wird, selber eingeben soll. Das hatte vorher geklappt aber jetzt geht das nicht mehr. Hat da jemand einen Tipp? Wo genau muss ich die Methode zum abfragen der Tastureingabe ansetzten? 


```
import java.io.File;


public class Verzeichnisstruktur {

    
    public static void listDir(File dir) {
        File[] files = dir.listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                System.out.print(files[i].getAbsolutePath());
                if (files[i].isDirectory()) {
                    System.out.print(" (Ordner)\n");
                    listDir(files[i]); // ruft sich selbst mit dem
                    // Unterverzeichnis als Parameter auf
                }
                else {
                    System.out.print(" (Datei)\n");
                }
            }
        }
    }

    
    
    public static void main(String[] args) {

        String rootVerzeichnis = "C:...";
        File fileObjekt = new File(rootVerzeichnis);
        listDir(fileObjekt);
        
        
        
        
    }

}
```



Ja, und mittlerweile habe ich auch rausgefunden wie man Java-Codes hier richtig zitiert...


----------



## mihe7 (12. Apr 2021)

ninonar hat gesagt.:


> Das hatte vorher geklappt aber jetzt geht das nicht mehr


Was hattest Du vorher denn anders gemacht?


----------

